Update README.md

finished the rest of the readme, including eaglercraftbungee, and adding nginx reverse proxy; also added a quick crash course to nginx. this is the first "done" version, im sure ill catch some fuck ups later
This commit is contained in:
DiffuseHyperion 2022-10-28 17:07:34 +08:00 committed by GitHub
parent e6e74ddb4a
commit 436b8bd4ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

191
README.md
View File

@ -22,23 +22,23 @@ Eaglercraft is real Minecraft 1.5.2 that you can play in any regular web browser
# Table Of Contents:
| [Singleplayer](#Singleplayer) | [Multiplayer](#Multiplayer) | [Others](#Others) |
|-----------------------------------------------------------------------|-------------------------------------------------------------------|---------------------------------------------------|
| [Importing / Exporting Worlds](#Importing-/-Exporting-Worlds) | [Public clients / servers](#Public-clients-/-servers) | [Plugin Development](#Plugin-Development) |
| [LAN Worlds](#LAN-Worlds) | [Creating a Server - Bukkit](#Creating-a-server---Bukkit) | [Compiling](#Compiling) |
| [Public LAN Relays](#Public-LAN-Relays) | [Creating a Server - Bungeecord](#Creating-a-server---Bungeecord) | [Creating a resource pack](#Creating-a-resource-pack) |
| [Creating a LAN Relay](#Creating-a-LAN-Relay) | [Creating a Client](#Creating-a-Client) | [Contributing](#Contributing) |
| | [Bungeecord Configuration](#Bungeecord-Configuration) | |
| [Singleplayer](#Singleplayer) | [Multiplayer](#Multiplayer) | [Others](#Others) |
|---------------------------------------------------------------|---------------------------------------------------------------------------------|-------------------------------------------------------|
| [Importing / Exporting Worlds](#Importing-/-Exporting-Worlds) | [Public clients / servers](#Public-clients-/-servers) | [Plugin Development](#Plugin-Development) |
| [LAN Worlds](#LAN-Worlds) | [Creating a Server - Bukkit](#Creating-a-server---Bukkit) | [Compiling](#Compiling) |
| [Public LAN Relays](#Public-LAN-Relays) | [Creating a Server - EaglercraftBungee](#Creating-a-server---EaglercraftBungee) | [Creating a resource pack](#Creating-a-resource-pack) |
| [Creating a LAN Relay](#Creating-a-LAN-Relay) | [Creating a Client](#Creating-a-Client) | [Contributing](#Contributing) |
| | [Bungeecord Configuration](#Bungeecord-Configuration) | |
| | [Creating a Reverse Proxy - NGINX](#Creating-a-Reverse-Proxy---NGINX) | |
| | [NGINX Configuration](#NGINX-Configuration) | |
# Singleplayer
Simply press the 'Singleplayer' button on the main menu and you can create a regular vanilla minecraft and play it any time.
### Importing / Exporting Worlds
## Importing / Exporting Worlds
The worlds are stored in your browser's local storage, **you can export them as EPK files and import them again on all other Eaglercraft sites that also support singleplayer.** You can even copy an exported world to an entirely different computer, or send it to a friend, and import it and continue playing with all your progress saved.
**Link: [https://g.deev.is/eaglercraft/](https://g.deev.is/eaglercraft/)**
## LAN Worlds
### Eaglercraft fully supports LAN worlds, you can share your world with any player and they can connect directly to it as if you are running a server in your browser.
@ -55,7 +55,7 @@ Make sure they add the relay server your game opens the LAN world on to their "N
## Public LAN Relays
Here are some public relay servers you can use:
### Here are some public relay servers you can use:
- `wss://relay.deev.is/`
- `wss://relay.lax1dude.net/`
@ -73,17 +73,19 @@ Edit the `relayConfig.ini` file generated on first launch to change the port and
# Multiplayer
There are multiple community hosted servers, the best way to discover those is to use the [official client](https://g.deev.is/eaglercraft/)
### There are multiple community hosted servers, the best way to discover those is to use the [official client](https://g.deev.is/eaglercraft/)
Alternatively, there is a server list[^2] to find servers.
#### Alternatively, there is a server list[^2] to find servers.
[^2]: Server list is currently being rebuilt, use official client for now
# Creating your own server
There are multiple parts to a server, mainly consisting of bungeecord, a proxy which will translate websockets to raw TCP connection, which minecraft can understand.
There are ***multiple parts*** **to a server**, mainly consisting of a **regular 1.5.2 Bukkit server**, and a **modified version of Bungeecord** called **EaglercraftBungee**, which on top of the regular Bungeecord functionality, it translates WebSocket connections to raw TCP connections which Bukkit can understand.
You may also want to set up your own client, allowing you to control default server listings, resource packs, and a faster connection.
You may also want to set up your own **client**, allowing you to *control default server listings, resource packs, and an overall faster connection due to less load.*
If you want to use a domain for your server, **a reverse proxy** can be set up to enable extra functionality within EaglercraftBungee. **NGINX** is recommended, and a tutorial is included **[here](#Creating-a-Reverse-Proxy---NGINX)**. **This is optional, and can be skipped by just connecting with the IP.**
### If replit is acceptable, you can use [this](https://replit.com/@ayunami2000/eaglercraft-server) to automatically set up everything for a server, otherwise, look below for instructions
@ -101,7 +103,7 @@ Then, in that folder, run `chmod +x run_unix.sh` and then run `./run_unix.sh`. I
8. To add some bukkit plugins, download the plugin's JAR file for CraftBukkit 1.5.2 and place it in `java/bukkit_command/plugins`
(See [https://github.com/lax1dude/eaglercraft-plugins/](https://github.com/lax1dude/eaglercraft-plugins/) to download some supported plugins)
## Creating a server - Bungeecord
## Creating a server - EaglercraftBungee
1. In the same new folder, go into the `java/bungee_command` folder
2. In Windows, double-click `run.bat`. It should open a second terminal window
Keep both the first and second terminal window you opened, just minimize them, don't close
@ -114,7 +116,12 @@ There are alot more configurations in bungeecord, but this should set you up
**It should allow you to connect, if not, check the two terminal windows for errors**
## Creating a client
1. To install, create a website and upload the contents of `stable-download/web` to the URL you want to have Eaglercraft on
1. To install, upload the contents of `stable-download/web` to a web server.
- There are *multiple ways of setting up a web server*. **[NGINX](https://nginx.org) is a powerful web server, but alternatives like [Web Server for Chrome](https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb?hl=en) may be easier to set up.**
- A quick crash course on setting up NGINX is provided [here](#Creating-a-Reverse-Proxy---NGINX), **FOLLOW STEPS 1 AND 2 ONLY**, then navigate to `/var/www/html` and upload the contents of `stable-download/web` there.
- If you had installed NGINX earlier as a reverse proxy, you can also use it to host the client, **follow the steps above ^^^**
- Make sure that the URL to connect to the client and the server are separate, preferably with a path, like `https://eaglercraft.example.com/server`
2. **The 'web' folder will not work if you open it in your browser locally! If you see 'file:///' in the URL you are doing it wrong. You need to upload the folder to an HTTP or HTTPS server and access it over the internet via http:// or https://. The game will not load otherwise, this is not a bug**
3. To modify the list of default servers, modify the `window.eaglercraftOpts` variable in `index.html`.
4. **A full guide on how to configure `eaglercraftOpts` is coming soon, but it should be fairly intuitive to figure out how to set it up based on what the default values already are when you look in stable-download**
@ -127,115 +134,98 @@ There are alot more configurations in bungeecord, but this should set you up
- You can give your MOTD multiple lines, add a `motd2:` to define a second line
- **For an animated MOTD and icon, install EaglerMOTD: [https://github.com/lax1dude/eaglercraft-motd/](https://github.com/lax1dude/eaglercraft-motd/)**
## Authentication
- To add `/login` and `/register`, install [AuthMe](https://github.com/lax1dude/eaglercraft-plugins/tree/main/AuthMe) and carefully [read its documentation](https://github.com/AuthMe/AuthMeReloaded/wiki) to set it up correctly
## Moderation
- **To disable voice chat, set `voice_enabled: false` in the bungeecord config.yml**
- **To ban a username on Eaglercraftbungee, use:** `eag-ban <username>`
- **To ban an IP on Eaglercraftbungee, use:** `eag-ban-ip <ip>`, or `eag-ban-ip <name>` to ban the IP of a player automatically
- To ban a range of IP addresses, use slash notation to define a subnet. Example: `eag-ban-ip 192.168.0.0/8`
- To ban users by wildcard (\*) use: `eag-ban-wildcard <text>*` or `eag-ban-wildcard *<text>` or `eag-ban-wildcard *<text>*`
- **You can edit bans.txt in your EaglercraftBungee folder, the server automatically reloads the file when it is saved**
- To ban users by regular expression, use: `eag-ban-regex <regex>` with a regular expression to match the username in **lowercase**
- **If you use /op on your server, keep in mind that if you "/op LAX1DUDE", a player joining as 'laX1DUDE' or 'LaX1dUdE' or 'lax1dude' will all have /op too. To solve this problem, force all operators to only be able to join with all lowercase ('lax1dude') letters in their usernames by moving 'BitchFilterPlugin.jar" into "java/bukkit_command/plugins" and then register every op username lowercase**
36. To connect to your server through a `ws://` or `wss://` URL instead of `ip:port`, set up [nginx](https://nginx.org/) as a reverse proxy to the `ip:port` of you EaglercraftBungee server you want the URL to connect to. Use a location URL template with the `proxy_pass` directive.
37. Eaglercraft uses port 80 for IP connections by default, typing `127.0.0.1` is the same as typing `ws://127.0.0.1:80/`
38. To forward a client's remote IP address from a request on nginx to EaglercraftBungee for enforcing IP bans, set the `X-Real-IP` header on the request to websocket when it is proxied
## EaglercraftBungee
EaglercraftBungee translates WebSockets to a raw Minecraft 1.5.2 TCP connection. It is just regular BungeeCord with more `config.yml` options, and a built in plugin for syncing people's custom skins between clients so people can see each other's skins
### If voice chat causes moderation problems, set `voice_enabled: false` in config.yml
## Authentication
**To enable the /login and /register commands in EaglercraftBungee, you can edit this portion of config.yml**
```yaml
authservice:
enabled: false
register_enabled: true
authfile: auths.db
register_enabled: true
ip_limit: 0
join_messages:
- '&3Welcome to my &aEaglercraftBungee &3server!'
login_timeout: 30
enabled: false
```
- `enable` Turns login commands on and off
- `authfile` Sets the authentication database file, which is **compatible with AuthMe**
- `register_enabled` Turns register command on and off
- `authfile` Sets the authentication database file, which is **compatible with AuthMe**
- `ip_limit` Sets the max number of registrations per IP, 0 = unlimited
- `join_messages` List of messages to show the player when they join
- `login_timeout` Sets how many seconds players have to log in before they are kicked
**EaglercraftBungee has a built in domain blacklist that updates automatically, you can disable it by setting this in config.yml:**
- `enable` Turns login commands on and off
## Moderation
### Miscellaneous
- **If you use /op on your server, keep in mind that if you "/op LAX1DUDE", a player joining as 'laX1DUDE' or 'LaX1dUdE' or 'lax1dude' will all have /op too. To solve this problem, force all operators to only be able to join with all lowercase ('lax1dude') letters in their usernames by moving 'BitchFilterPlugin.jar" into "java/bukkit_command/plugins" and then register every op username lowercase**
- **To disable voice chat, set `voice_enabled: false` in the bungeecord config.yml**
### Username Bans
- **To ban a username on Eaglercraftbungee, use:** `eag-ban <username>`
- **You can edit bans.txt in your EaglercraftBungee folder, the server automatically reloads the file when it is saved**
- To ban users by regular expression, use: `eag-ban-regex <regex>` with a regular expression to match the username in **lowercase**
### IP Bans
In order for IP Bans to work, a [**a reverse proxy**](#Creating-a-Reverse-Proxy---NGINX) is required, and **[`forward_ip`](#NGINX-Configuration) needs to be configured,** ***otherwise it cannot ban the user's IP***
- **To ban an IP on Eaglercraftbungee, use:** `eag-ban-ip <ip>`, or `eag-ban-ip <name>` to ban the IP of a player automatically
- To ban a range of IP addresses, use slash notation to define a subnet. Example: `eag-ban-ip 192.168.0.0/8`
- To ban users by wildcard (\*) use: `eag-ban-wildcard <text>*` or `eag-ban-wildcard *<text>` or `eag-ban-wildcard *<text>*`
### Client Bans
- **EaglercraftBungee has a built in domain blacklist that updates automatically, you can disable it by setting this in config.yml:**
```yaml
enable_web_origin_blacklist: false
```
**To block all clients on replit from joining, set this to true in config.yml:**
- **To block all clients on replit from joining, set this to true in config.yml:**
```yaml
origin_blacklist_block_replit_clients: true
```
**To block all offline-download clients, set this to true in config.yml:**
- **To block all offline-download clients, set this to true in config.yml:**
```yaml
origin_blacklist_block_offline_download: true
```
**To block the debug runtime (or other desktop clients), set this to true in config.yml:**
- **To block the debug runtime (or other desktop clients), set this to true in config.yml:**
```yaml
origin_blacklist_block_missing_origin_header: true
```
- **To add your own blacklisted domains**, create a file called `origin_blacklist.txt` in your bungeecord directory and put the regular expressions inside, one on each line. There 's also a `domain` command in the console to view a player's domain, and a `block-domain` and `block-domain-name` and `unblock-domain` command to manage the local `origin_blacklist.txt` from the bungee console (if you don't know how to edit a file on your own). The list reloads automatically when changes to the file are detected.
**To add your own blacklisted domains**, create a file called `origin_blacklist.txt` in your bungeecord directory and put the regular expressions inside, one on each line. There 's also a `domain` command in the console to view a player's domain, and a `block-domain` and `block-domain-name` and `unblock-domain` command to manage the local `origin_blacklist.txt` from the bungee console (if you don't know how to edit a file on your own). The list reloads automatically when changes to the file are detected.
### To configure bungee to block connections from all clients except your own, set this option:
- ### To configure bungee to block connections from all clients except your own, set this option:
```yaml
origin_blacklist_use_simple_whitelist: true
```
### Then, add your domain to `origin_blacklist_simple_whitelist` like this:
Then, add your domain to `origin_blacklist_simple_whitelist` like this:
```yaml
origin_blacklist_simple_whitelist:
- type the name of your client's domain here
```
### Then, unless still you want it as an option for your players, disable the offline download so hackers don't use it to bypass the whitelist, as it is not blocked in whitelist mode by default:
Then, unless still you want it as an option for your players, disable the offline download so hackers don't use it to bypass the whitelist, as it is not blocked in whitelist mode by default:
```yaml
origin_blacklist_block_offline_download: true
```
## Others
### To stop people from using bookmarklets to load a client from a different URL onto your official URL via XXS, add these headers to NGINX:
- The server has built in DoS protection, reset it via typing 'eag-ratelimit reset' in the bungee console**
```
add_header X-Frame-Options "SAMEORIGIN";
add_header Referrer-Policy "strict-origin";
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self' 'unsafe-inline'; img-src 'self' 'unsafe-inline' data: blob:; connect-src 'self' ws: wss:; upgrade-insecure-requests";
```
(not fully tested, excuse the scroll bar)
### To use IP bans and rate limiting, enable `forward_ip` and pass a X-Real-IP header from your proxy to the bungeecord's websocket port
Nginx example: add `proxy_set_header X-Real-IP $remote_addr` to your proxy configuration
**The server has built in DoS protection, reset it via typing 'eag-ratelimit reset' in the bungee console**
- Rate limiting is possible, but [**a reverse proxy**](#Creating-a-Reverse-Proxy---NGINX) is required, and **[`forward_ip`](#NGINX-Configuration) needs to be configured to use rate limiting,** ***otherwise it will be disabled by default***
```yaml
ratelimit:
@ -256,9 +246,7 @@ ratelimit:
- `exceptions` a list of IP addresses that should never get rate limited. **Local IPs like 127.0.0.1 and 192.168.\*.\* and such are set as exceptions by default**
**you need `forward_ip` configured to use rate limiting, otherwise it will be disabled by default**
### Redirecting the client to a new WebSocket
- ### Redirecting the client to a new WebSocket
If you would like to signal the client to disconnect from your bungeecord and reconnect to a different bungeecord, configure an entry in the `servers` part of config.yml like this:
@ -270,6 +258,59 @@ test:
In this example, sending a player to the server `test`, such as when they enter a portal or type `/server test`, will trigger their client to disconnect from your bungeecord and then automatically reconnect to `wss://ServerHere/` as if it was entered via "Direct Connect"
## Creating a Reverse Proxy - NGINX
Here is a quick crash course of setting up NGINX on Linux, specifically on Debian distributions.
Here are some google searches for other distributions:
- [Windows](https://www.google.com/search?q=set+up+nginx+on+windows)
- [Mac](https://www.google.com/search?q=set+up+nginx+on+mac)
- [Linux - Arch](https://www.google.com/search?q=set+up+nginx+on+arch)
- [Linux - Fedora](https://www.google.com/search?q=set+up+nginx+on+fedora)
1. Open up your terminal, and run
``sudo apt update``
and
``sudo apt install nginx``
2. Open any web browser, and search for `localhost` in your search bar. You should see something like this:![Welcome to nginx](https://ubuntucommunity.s3.dualstack.us-east-2.amazonaws.com/optimized/2X/7/7504d83a9fe8c09d861b2f7c49e144ac773f0c0d_2_690x288.png)
3. Navigate to NGINX's configuration with `cd /etc/nginx/sites-enabled`.
4. Create a new configuration file with your domain name, for example `nano eaglercraft.example.com`
5. Paste in the following code into the file. Replace `example.com` with your own domain, and `app_server_address` as the `ip:port` of your EaglercraftBungee server you want the URL to connect to.
```
server {
listen 80;
listen [::]:80;
server_name example.com eaglercraft.example.com;
location / {
proxy_pass app_server_address;
include proxy_params;
}
}
```
6. Now, restart NGINX with `sudo service nginx restart` and you should be good to go!
## NGINX Configuration
### To implement the following configuration, add the lines below the `proxy_pass` line.
- **To stop people from using bookmarklets to load a client from a different URL onto your official URL via XXS, add these headers to NGINX:**
```
add_header X-Frame-Options "SAMEORIGIN";
add_header Referrer-Policy "strict-origin";
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self' 'unsafe-inline'; img-src 'self' 'unsafe-inline' data: blob:; connect-src 'self' ws: wss:; upgrade-insecure-requests";
```
###### (not fully tested, excuse the scroll bar)
- **To use IP bans and rate limiting, add `proxy_set_header X-Real-IP $remote_addr` to your proxy configuration**
# Others
## Plugin Development
@ -302,4 +343,6 @@ The LWJGL runtime is no longer supported it is only included for reference
All I really have to say is, tabs not spaces, and format the code to be like the eclipse auto format tool on factory settings, but also run-on lines of code long enough to go off the screen and single line if statements and other format violations in that category are welcome if it helps enhance the contrast between the less important code and the more important code in a file. Don't commit changes to `javascript/classes.js` or `javascript/classes_server.js` or `javascript/assets.epk` or anything in `stable-download/`. I'll recompile those myself when I merge the pull request.
***
**README was redesigned by [DiffuseHyperion](https://github.com/DiffuseHyperion) :)**
###### the old readme sucks lol