LAX1DUDE_SIGNATURE.txt
for instructions to verify this is an original copy, if the file is not present then do not use this copy of the project:-: Eaglercraft is real Minecraft 1.5.2 that you can play in any regular web browser. That includes school chromebooks, it works on all chromebooks. It supports both singleplayer and multiplayer.
Currently maintained by ayunami2000
For any questions you can join the discord server and hit us up there https://discord.gg/Ekzcgs3DKZ
(right click the link and press ‘Save link as…’ to download the file)
| Singleplayer | Multiplayer | Others | |—————————————————————|———————————————————————————|——————————————————-| | Importing and Exporting Worlds | Public clients and servers | Plugin Development | | LAN Worlds | Creating a Server - Bukkit | Compiling | | Public LAN Relays | Creating a Server - EaglercraftBungee | Creating a resource pack | | Creating a LAN Relay | Creating a Client | Contributing | | | EaglercraftBungee Configuration | | | | Creating a Reverse Proxy - NGINX | | | | NGINX Configuration | |
Simply press the ‘Singleplayer’ button on the main menu and you can create a regular vanilla minecraft and play it any time.
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.
LAN worlds will work between any two devices connected to the internet, you are not limited to only players connected to your Wi-Fi network
To open your world to LAN, go to the pause menu and click ‘Open to LAN’. You can configure the gamemode and cheats and if you would like to hide your LAN world. When you do not hide your LAN world, it will appear on the Multiplayer screen from the main menu to anybody else also on your Wi-Fi network. Set the world hidden if you are at school or something and don’t want everyone else in your class to join as well and start griefing.
When you open the world to LAN it will give you a ‘join code’. Simply share the code with your friends and they can visit the Multiplayer screen from the main menu and click ‘Direct Connect’ and enter the code and they will be able to join your world.
Make sure they add the relay server your game opens the LAN world on to their “Network Settings” menu accessable from the Multiplayer screen. You simply must send them the URL indicated in the pause menu once the world is opened and they can use the “Add Relay” option to add the URL to their list.
wss://relay.deev.is/
wss://relay.lax1dude.net/
wss://relay.shhnowisnottheti.me/
java -jar sp-relay.jar
Run java -jar sp-relay.jar --debug
to view debug info like all the IPs of incoming connections, as it is not shown by default because logging all that info will reduce performance when the relay is being pinged many times a second depending on it’s popularity.
Edit the relayConfig.ini
file generated on first launch to change the port and configure ratelimiting and such, and relays.txt
to change the list of STUN and TURN relays reported to clients connecting to the relay, which are required to correctly establish a P2P LAN world connection in browsers
The origin-whitelist
config variable is a semicolon (;
) seperated list of domains used to restrict what sites are to be allowed to use your relay. When left blank it allows all sites. Add offline
to allow offline download clients to use your relay as well, and null
to allow connections that do not specify an Origin:
header. Use *
as a wildcard, for example: *.deev.is
allows all domains ending with “deev.is” to use the relay.
Multiplayer functions like vanilla Minecraft, allowing you to join normal Minecraft servers like a normal client.
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 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. This is optional, and can be skipped by just connecting with the IP.
java/bukkit_command
folderrun.bat
. It should open a new terminal windowcd
command to navigate to java/bukkit_command
chmod +x run_unix.sh
and then run ./run_unix.sh
. It should start the same serverjava/bukkit_command/plugins
(See https://github.com/lax1dude/eaglercraft-plugins/ to download some supported plugins)java/bungee_command
folderrun.bat
. It should open a second terminal windowjava/bungee_command
this timejava/bungee_command/plugins
There are alot more configurations in bungeecord, but this should set you up
Your server is now ready. Visit any client, and go to ‘Multiplayer’ from the main menu. Select ‘Direct Connect’, type 127.0.0.1:25565
and press ‘Join Server’
It should allow you to connect, if not, check the two terminal windows for errors
stable-download/web
to a web server.
/var/www/html
and upload the contents of stable-download/web
there.https://eaglercraft.example.com/server
window.eaglercraftOpts
variable in index.html
.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?server=
variable to the URL, like (for example): https://g.deev.is/eaglercraft/?server=127.0.0.1:25565 will automatically join ws://127.0.0.1:25565/
as soon as the player finishes setting their username and skinmotd1:
tag of the listener config in java/bungee_command/config.yml
, and replace server-icon.png
in the folder where the config file is. Use &
to add color/formatting codes. The server list will downscale your icon to 64x64 pixelsmotd2:
to define a second lineTo enable the /login and /register commands in EaglercraftBungee, you can edit this portion of config.yml
authservice:
authfile: auths.db
register_enabled: true
ip_limit: 0
join_messages:
- '&3Welcome to my &aEaglercraftBungee &3server!'
login_timeout: 30
enabled: false
authfile
Sets the authentication database file, which is compatible with AuthMe
register_enabled
Turns register command on and off
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
enable
Turns login commands on and off
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
eag-ban <username>
eag-ban-regex <regex>
with a regular expression to match the username in lowercaseIn order for IP Bans to work, a a reverse proxy is required, and forward_ip
needs to be configured, otherwise it cannot ban the user’s IP
eag-ban-ip <ip>
, or eag-ban-ip <name>
to ban the IP of a player automaticallyeag-ban-ip 192.168.0.0/8
eag-ban-wildcard <text>*
or eag-ban-wildcard *<text>
or eag-ban-wildcard *<text>*
enable_web_origin_blacklist: false
origin_blacklist_block_replit_clients: true
origin_blacklist_block_offline_download: true
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.
origin_blacklist_use_simple_whitelist: true
Then, add your domain to origin_blacklist_simple_whitelist
like this:
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:
origin_blacklist_block_offline_download: true
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 is required, and forward_ip
needs to be configured to use rate limiting, otherwise it will be disabled by default
ratelimit:
ip:
enable: true
period: 90
limit: 60
limit_lockout: 80
lockout_duration: 1200
exceptions: []
enable
enable rate limiting
period
and limit
set the number of requests (limit
) can be made in (period
) number of seconds
limit_lockout
and lockout_duration
set the number of requests (limit_lockout
) that can be made in (period
) seconds before the IP is blocked for lockout_duration
number of seconds
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
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:
test:
redirect: wss://ServerHere/
restricted: false
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”
Here is a quick crash course of setting up NGINX on Linux, specifically on Debian distributions.
Here are some google searches for other distributions:
sudo apt update
and
sudo apt install nginx
localhost
in your search bar. You should see something like this:Navigate to NGINX’s configuration with cd /etc/nginx/sites-enabled
.
Create a new configuration file with your domain name, for example nano eaglercraft.example.com
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;
}
}
sudo service nginx restart
and you should be good to go!proxy_pass
line.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";
proxy_set_header X-Real-IP $remote_addr
to your proxy configurationTo develop a plugin, download stable-download/java/bungee_command/bungee_dist.jar and add it to the Build Path of your Java IDE. Develop the plugin just like a regular BungeeCord plugin, see EaglerMOTD for an example.
Test your plugin by exporting it as a jar and putting it in the ‘/plugins’ directory of EaglercraftBungee and then clicking ‘run.bat’
net.md_5.bungee.api.event.WebsocketMOTDEvent: Triggered when a client or website requests the MOTD
net.md_5.bungee.api.event.WebsocketQueryEvent: Triggered when a client or website requests a query. This happens when a site opens a text WebSocket to a listener and sends a single string Accept: <query>
packet. Can be used to provide additional custom statistics to server list sites supporting integrated WebSocket queries
Register event handlers using the standard BungeeCord @EventHandler
annotation in your Listener
class
To compile for the web, run the gradle ‘teavm’ compile target to generate the classes.js file.
The LWJGL runtime is no longer supported it is only included for reference
run.bat
. Wait for the window to say Press any key to continue...
and close it. Then, go to ../javascript
in the repository and copy javascript/assets.epk
to the assets.epk
on your websitecd
and run chmod +x run_unix.sh
and then ./run_unix.sh
to do this, then copy the same javascript/assets.epk
to the assets.epk
on your websiteAll 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.