-
Notifications
You must be signed in to change notification settings - Fork 112
Make README more consistent #432
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 6 commits
1152652
0f81613
7060ce5
801bcc9
ce66c56
fa9b045
c6cf7f1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,17 +2,17 @@ | |
|
||
 | ||
|
||
Minecraft **clone** rewritten in TypeScript using the best modern web technologies. Minecraft vanilla-compatible client and integrated server packaged into a single web app. | ||
Minecraft **clone** written in TypeScript using the best modern web technologies. A vanilla-compatible client and integrated server packaged into a single web app. | ||
|
||
You can try this out at [mcraft.fun](https://mcraft.fun/), [pcm.gg](https://pcm.gg) (short link), [mcon.vercel.app](https://mcon.vercel.app/) or the GitHub pages deploy. Every commit from the default (`develop`) branch is deployed to [s.mcraft.fun](https://s.mcraft.fun/) and [s.pcm.gg](https://s.pcm.gg/) - so it's usually newer, but might be less stable. | ||
You can try this out at [mcraft.fun](https://mcraft.fun/), [pcm.gg](https://pcm.gg), [mcon.vercel.app](https://mcon.vercel.app/), or the GitHub Pages deployment. Every commit from the default (`next`) branch is deployed to [s.mcraft.fun](https://s.mcraft.fun/) and [s.pcm.gg](https://s.pcm.gg/) - it's usually newer, but might be less stable. | ||
|
||
> For Turkey/Russia use [ru.mcraft.fun](https://ru.mcraft.fun/) (since Cloudflare is blocked) | ||
> In Turkey or Russia, use [ru.mcraft.fun](https://ru.mcraft.fun/) (since Cloudflare is blocked) | ||
|
||
Don't confuse with [Eaglercraft](https://git.eaglercraft.rip/eaglercraft/eaglercraft-1.8) which is a REAL vanilla Minecraft Java edition port to the web (but with its own limitations). Eaglercraft is a fully playable solution, meanwhile this project is aimed for *device-compatiiblity* and better performance so it feels portable, flexible and lightweight. It's also a very strong example on how to build true HTML games for the web at scale entirely with the JS ecosystem. Have fun! | ||
Don't confuse this with [Eaglercraft](https://eagsrc.webmc.xyz) which is a REAL vanilla Minecraft Java Edition port to the web (but with its own limitations). Eaglercraft is a fully playable solution, meanwhile this project is aimed at *device-compatibility* and better performance so it feels portable, flexible and lightweight. It's also a good example on how to build true HTML games for the web at scale entirely with the JS ecosystem. Have fun! | ||
|
||
For building the project yourself / contributing, see [Development, Debugging & Contributing](#development-debugging--contributing). For reference at what and how web technologies / frameworks are used, see [TECH.md](./TECH.md) (also for comparison with Eaglercraft). | ||
|
||
> **Note**: You can deploy it on your own server in less than a minute using a one-liner script from [Minecraft Everywhere repo](https://github.com/zardoy/minecraft-everywhere) | ||
> **Note**: You can deploy it on your own server in less than a minute using a one-liner script from the [Minecraft Everywhere repo](https://github.com/zardoy/minecraft-everywhere). | ||
|
||
### Big Features | ||
|
||
|
@@ -25,12 +25,12 @@ For building the project yourself / contributing, see [Development, Debugging & | |
- First-class touch (mobile) & controller support | ||
- First-class keybindings configuration | ||
- Advanced Resource pack support: Custom GUI, all textures. Server resource packs are supported with proper CORS configuration. | ||
- Builtin JEI with recipes & descriptions for almost every item (JEI is creative inventory replacement) | ||
- Built-in JEI with recipes & descriptions for almost every item (JEI is a creative-inventory replacement) | ||
- Custom protocol channel extensions (eg for custom block models in the world) | ||
- Play with friends over internet! (P2P is powered by Peer.js discovery servers) | ||
- ~~Google Drive support for reading / saving worlds back to the cloud~~ | ||
- Support for custom rendering 3D engines. Modular architecture. | ||
- even even more! | ||
- and more! | ||
|
||
All components that are in [Storybook](https://minimap.mcraft.fun/storybook/) are published as npm module and can be used in other projects: [`minecraft-react`](https://npmjs.com/minecraft-react) | ||
|
||
|
@@ -46,9 +46,9 @@ All components that are in [Storybook](https://minimap.mcraft.fun/storybook/) ar | |
|
||
This project is tested with BrowserStack. Special thanks to [BrowserStack](https://www.browserstack.com/) for providing testing infrastructure! | ||
|
||
Howerver, it's known that these browsers have issues: | ||
However, it's known that these browsers have issues: | ||
|
||
**Opera Mini**: Disable *mouse gestures* in browsre settings to avoid opening new tab on right click hold | ||
**Opera Mini**: Disable *mouse gestures* in browser settings to avoid opening a new tab on right-click-and-hold. | ||
|
||
**Vivaldi**: Disable Controls -> *Raw Input* in game settings if experiencing issues | ||
|
||
|
@@ -64,23 +64,23 @@ Versions below 1.13 are not tested currently and may not work correctly. | |
|
||
### World Loading | ||
|
||
Zip files and folders are supported. Just drag and drop them into the browser window. You can open folders in readonly and read-write mode. New chunks may be generated incorrectly for now. | ||
In case of opening zip files they are stored in your ram entirely, so there is a ~300mb file limit on IOS. | ||
Whatever offline mode you used (zip, folder, just single player), you can always export world with the `/export` command typed in the game chat. | ||
Zip files and folders are supported. Just drag and drop them into the browser window. You can open folders in read-only or read-write mode. New chunks may be generated incorrectly for now. | ||
When opening zip files, they are stored entirely in your RAM. There is a ~300 MB file limit on iOS. | ||
Whatever offline mode you used (zip, folder, just singleplayer), you can always export world with the `/export` command typed in the game chat. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add the missing article before “world”. “For now” sentence should read “export the world” to stay grammatically correct. 🧰 Tools🪛 LanguageTool[grammar] ~69-~69: There might be a mistake here. (QB_NEW_EN) 🤖 Prompt for AI Agents
|
||
|
||
 | ||
|
||
### Servers & Proxy | ||
|
||
You can play almost on any Java server, vanilla servers are fully supported. | ||
See the [Mineflayer](https://github.com/PrismarineJS/mineflayer) repo for the list of supported versions (should support majority of versions). | ||
There is a builtin proxy, but you can also host your one! Just clone the repo, run `pnpm i` (following CONTRIBUTING.MD) and run `pnpm prod-start`, then you can specify `http://localhost:8080` in the proxy field. Or you can deploy it to the cloud service: | ||
There is a built-in proxy, but you can also host your one! Just clone the repo, run `pnpm i` (see CONTRIBUTING.MD) and run `pnpm prod-start`, then you can specify `http://localhost:8080` in the proxy field. You can also deploy it to a cloud service: | ||
colbster937 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
[](https://app.koyeb.com/deploy?name=minecraft-web-client&type=git&repository=zardoy%2Fminecraft-web-client&branch=next&builder=dockerfile&env%5B%5D=&ports=8080%3Bhttp%3B%2F) | ||
|
||
> **Note**: If you want to make **your own** Minecraft server accessible to web clients (without our proxies), you can use [mwc-proxy](https://github.com/zardoy/mwc-proxy) - a lightweight JS WebSocket proxy that runs on the same server as your Minecraft server, allowing players to connect directly via `wss://play.example.com`. `?client_mcraft` is added to the URL, so the proxy will know that it's this client. | ||
|
||
Proxy servers are used to connect to Minecraft servers which use TCP protocol. When you connect connect to a server with a proxy, websocket connection is created between you (browser client) and the proxy server located in Europe, then the proxy connects to the Minecraft server and sends the data to the client (you) without any packet deserialization to avoid any additional delays. That said all the Minecraft protocol packets are processed by the client, right in your browser. | ||
Proxy servers are used to connect to Minecraft servers that use the TCP protocol. When you connect to a server with a proxy, a WebSocket connection is created between you (browser client) and the proxy server; then the proxy connects to the Minecraft server and sends the data to the client (you) without any packet deserialization to avoid additional delays. That said all Minecraft protocol packets are processed by the client, right in your browser. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Insert a comma after “That said”. Introductory phrase needs a comma: “That said, all Minecraft protocol packets…”. 🤖 Prompt for AI Agents
|
||
|
||
```mermaid | ||
graph LR | ||
|
@@ -117,7 +117,7 @@ There are many many settings, that are not exposed in the UI yet. You can find o | |
|
||
### Console | ||
|
||
To open the console, press `F12`, or if you are on mobile, you can type `#dev` in the URL (browser address bar), it wont't reload the page, but you will see a button to open the console. This way you can change advanced settings and see all errors or warnings. Also this way you can access global variables (described below). | ||
To open the console, press `F12`. On mobile, you can type `#dev` in the browser address bar; the page won't reload, and you'll see a button to open the console. This lets you change advanced settings, see logs, and access global variables (described below). | ||
|
||
### Development, Debugging & Contributing | ||
|
||
|
@@ -127,8 +127,8 @@ There is world renderer playground ([link](https://mcon.vercel.app/playground/)) | |
|
||
However, there are many things that can be done in online production version (like debugging actual source code). Also you can access some global variables in the console and there are a few useful examples: | ||
|
||
- If you type `debugToggle`, press enter in console - It will enables all debug messages! Warning: this will start all packets spam. | ||
Instead I recommend setting `options.debugLogNotFrequentPackets`. Also you can use `debugTopPackets` (with JSON.stringify) to see what packets were received/sent by name | ||
- If you type `debugToggle` and press Enter in the console — it will enable all debug messages! Warning: this will start packet spam. | ||
Instead, I recommend setting `options.debugLogNotFrequentPackets`. You can also use `debugTopPackets` (with `JSON.stringify`) to see what packets were received/sent by name | ||
|
||
- `bot` - Mineflayer bot instance. See Mineflayer documentation for more. | ||
- `world` - Three.js world instance, basically does all the rendering (part of renderer backend). | ||
|
@@ -151,7 +151,7 @@ You can also drag and drop any .dat or .mca (region files) into the browser wind | |
|
||
- `F3` - Toggle debug overlay | ||
- `F3 + A` - Reload all chunks (these that are loaded from the server) | ||
<!-- <!-- - `F3 + N` - Restart local server (basically resets the world!) --> | ||
<!-- - `F3 + N` - Restart local server (basically resets the world!) --> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can remove it |
||
- `F3 + G` - Toggle chunk sections (geometries) border visibility + entities outline (aka Three.js geometry helpers) | ||
|
||
world chunks have a *yellow* border, hostile mobs have a *red* outline, passive mobs have a *green* outline, players have a *blue* outline. | ||
|
@@ -168,19 +168,19 @@ General: | |
- `?modal=<modal>` - Open specific modal on page load eg `keybindings`. Very useful on UI changes testing during dev. For path use `,` as separator. To get currently opened modal type this in the console: `activeModalStack.at(-1).reactType` | ||
- `?replayFileUrl=<url>` - Load and start a packet replay session from a URL with a integrated server. For debugging / previewing recorded sessions. The file must be CORS enabled. | ||
|
||
Server specific: | ||
Multiplayer specific: | ||
|
||
- `?ip=<server_address>` - Display connect screen to the server on load with predefined server ip. `:<port>` is optional and can be added to the ip. | ||
- `?name=<name>` - Set the server name for saving to the server list | ||
- `?version=<version>` - Set the version for the server | ||
- `?proxy=<proxy_address>` - Set the proxy server address to use for the server | ||
- `?proxy=<proxy_address>` - Set the proxy server address to use for the server | ||
- `?username=<username>` - Set the username for the server | ||
- `?lockConnect=true` - Only works then `ip` parameter is set. Disables cancel/save buttons and all inputs in the connect screen already set as parameters. Useful for integrates iframes. | ||
- `?autoConnect=true` - Only works then `ip` and `version` parameters are set and `allowAutoConnect` is `true` in config.json! Directly connects to the specified server. Useful for integrates iframes. | ||
- `?lockConnect=true` - Only works when the `ip` parameter is set. Disables cancel/save buttons and all inputs in the connect screen already set as parameters. Useful for embedded iframes. | ||
- `?autoConnect=true` - Only works when the `ip` and `version` parameters are set and `allowAutoConnect` is `true` in config.json! Directly connects to the specified server. Useful for embedded iframes. | ||
- `?serversList=<list_or_url>` - `<list_or_url>` can be a list of servers in the format `ip:version,ip` or a url to a json file with the same format (array) or a txt file with line-delimited list of server IPs. | ||
- `?addPing=<ping>` - Add a latency to both sides of the connection. Useful for testing ping issues. For example `?addPing=100` will add 200ms to your ping. | ||
|
||
Single player specific: | ||
Singleplayer specific: | ||
|
||
- `?loadSave=<save_name>` - Load the save on load with the specified folder name (not title) | ||
- `?singleplayer=1` or `?sp=1` - Create empty world on load. Nothing will be saved | ||
|
@@ -219,8 +219,8 @@ Only during development: | |
|
||
### Notable Things that Power this Project | ||
|
||
- [Mineflayer](https://github.com/PrismarineJS/mineflayer) - Handles all client-side communications with the server (including the builtin one) - forked | ||
- [Forked Flying Squid (Space Squid)](https://github.com/zardoy/space-squid) - The builtin offline server that makes single player & P2P possible! | ||
- [Mineflayer](https://github.com/PrismarineJS/mineflayer) - Handles all client-side communications with the server (including the built-in one) | ||
- [Forked Flying Squid (Space Squid)](https://github.com/zardoy/space-squid) - The built-in offline server that makes singleplayer & P2P possible! | ||
- [Prismarine Provider Anvil](https://github.com/PrismarineJS/prismarine-provider-anvil) - Handles world loading (region format) | ||
- [Prismarine Physics](https://github.com/PrismarineJS/prismarine-physics) - Does all the physics calculations | ||
- [Minecraft Protocol](https://github.com/PrismarineJS/node-minecraft-protocol) - Makes connections to servers possible | ||
|
@@ -233,6 +233,6 @@ Only during development: | |
|
||
### Alternatives | ||
|
||
- [https://github.com/ClassiCube/ClassiCube](ClassiCube - Better C# Rewrite) [DEMO](https://www.classicube.net/server/play/?warned=true) | ||
- [https://m.eaglercraft.com/](EaglerCraft) - Eaglercraft runnable on mobile (real Minecraft in the browser) | ||
- [js-minecraft](https://github.com/LabyStudio/js-minecraft) - An insanely well done clone from the graphical side that inspired many features here | ||
- [ClassiCube](https://github.com/ClassiCube/ClassiCube) - Better C# rewrite [\[DEMO\]](https://www.classicube.net/server/play/?warned=true) | ||
- [Eaglercraft](https://webmc.xyz/) - Real Minecraft in the browser [\[DEMO\]](https://webmc.xyz/#/g/03b1c3b3-bd6a-4b17-ba94-eaf9330df3be) | ||
- [js-minecraft](https://github.com/LabyStudio/js-minecraft) - An insanely well-done clone from the graphical side that inspired many features here [\[DEMO\]](https://labystudio.github.io/js-minecraft/) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.