Compare commits

..

88 commits

Author SHA1 Message Date
a95bc7641e Update README.md 2025-10-07 16:48:34 +02:00
x8r
ae6e332cd2 Remove click playing 2025-09-21 19:12:59 -05:00
x8r
db9c37781b Update Intro Movie 2025-09-21 19:01:19 -05:00
xor
45f5724a9e
Delete SECURITY.md 2025-09-21 11:51:48 -05:00
x8r
9feac53eaa Try and fix dragonx? 2025-09-21 10:03:29 -05:00
x8r
1edd63bb5b Fix pack authors 2025-09-21 09:55:06 -05:00
x8r
79e4bb9376 Update panorama length 2025-09-21 09:47:40 -05:00
x8r
ce4e62b8b3 Merge branch 'main' of https://github.com/x8rr/Eaglercraft-Extras 2025-09-21 09:33:08 -05:00
x8r
91ffcc3e59 Super Small Patches 2025-09-21 09:32:59 -05:00
SprintingSnail
a3ba9f596a
Update README.md 2025-09-21 09:24:34 -05:00
x8r
e805100ffb Tiny patches 2025-09-21 08:49:14 -05:00
x8r
67acd6ea78 Fix launch movie 2025-09-20 16:12:40 -05:00
x8r
b91efeea8a v2.1.0 - Build Kpz1VR
Co-authored-by: SyntaxError52
2025-09-20 15:15:30 -05:00
x8r
ffd5390b22 change my name bro 2025-09-14 16:52:56 -05:00
x8r
d50214725e remove v2 tag 2025-09-14 16:40:56 -05:00
x8r
34cf2ba582 Add server-status refreshing 2025-09-14 16:37:00 -05:00
x8r
bfc0ec0b6e Fix the clients 2025-09-14 16:35:15 -05:00
x8r
e3fbed11e9 remove github icon 2025-09-14 16:17:17 -05:00
x8r
3dfca0cecf Fix nova client 2025-09-14 16:16:45 -05:00
x8r
e13f4c59cb Fix fonts 2025-09-14 16:15:56 -05:00
x8r
23204a4e69 Minor fixes for v2 2025-09-14 16:10:03 -05:00
xor
c750a1268a
Update README.md 2025-09-14 15:49:10 -05:00
x8r
8f9dd1aa5d v2 2025-09-14 15:40:53 -05:00
andrew
21aa180b46
Update README.md 2025-03-13 18:44:17 -05:00
andrew
2083fb992f
Update README.md 2025-03-13 18:43:54 -05:00
cobblesteve-dev
3457846613 fix 2024-12-16 16:09:34 -06:00
andrew
9d789ff132
Update servers.html 2024-12-16 15:56:02 -06:00
SprintingSnail
743564b79c
Update README.md 2024-12-06 10:52:36 -06:00
bahabryra
5a79bb386f
IP 2 2024-11-07 12:43:07 -06:00
bahabryra
002f5497ff
time legacy IP 2 2024-11-07 12:42:28 -06:00
cobblesteve
a63473fc26
Update SECURITY.md 2024-10-30 15:59:46 -05:00
cobblesteve
b7e533b86a
Update SECURITY.md 2024-10-30 15:59:27 -05:00
cobblesteve
69c97cc5a7
Remove Eagler Reborn 2024-10-30 15:54:51 -05:00
SyntaxError52
ea74dde2c8
added sticky scroll 2024-10-14 12:25:25 -05:00
cobblesteve-dev
6db1af70fb ok here we go (mario) 2024-10-07 17:42:00 -05:00
cobblesteve-dev
ff85893a29 ok there we go 2024-10-07 17:35:13 -05:00
cobblesteve-dev
97926bbf99 OK REAL REAL v1.7.0 2024-10-07 17:32:54 -05:00
cobblesteve-dev
c60932508e real v1.7.0 2024-10-07 17:29:07 -05:00
cobblesteve-dev
5d876fce55 alr alr alr 2024-10-07 17:21:56 -05:00
cobblesteve-dev
fcfdfd46f6 v1.7.0 2024-10-07 17:19:04 -05:00
SyntaxError52
26cd4a98fe
update to u35 2024-07-04 20:16:10 -04:00
cobblesteve-dev
c3ca943b45 Merge branch 'main' of https://github.com/cobblesteve01/Eaglercraft-Extras 2024-06-17 09:14:20 -05:00
cobblesteve-dev
8ba599b332 add eaglermobile by irv77 2024-06-17 09:14:17 -05:00
cobblesteve
3ea5cbc753
Update README.md 2024-06-15 19:42:21 -05:00
cobblesteve
8401177d95
Update README.md 2024-06-11 08:41:13 -05:00
cobblesteve
71044adbe7
Update README.md 2024-06-11 08:40:34 -05:00
cobblesteve
84d0521f4c
button woke up and chose not to work 2024-06-10 15:18:46 -05:00
cobblesteve-dev
1bf9162242 Add first skin 2024-06-10 15:08:34 -05:00
cobblesteve
a628b1d66d
Add Google Analytics Tag 2024-06-10 14:33:14 -05:00
cobblesteve
c9a02c6120
Update README.md 2024-06-10 13:15:51 -05:00
cobblesteve
3773cc21be
Update README.md 2024-06-10 13:14:17 -05:00
cobblesteve
4176e024fd
update eaglercraftx to u34 2024-06-10 13:10:52 -05:00
cobblesteve
0bf76c05f4
fixed the Skyblock world download issue 2024-06-08 16:19:27 -05:00
cobblesteve
72080070db
Update README.md 2024-06-08 16:15:11 -05:00
cobblesteve-dev
a384b7f901 add mc quick guide to nav bar on servers.html 2024-06-02 14:32:34 -05:00
cobblesteve-dev
470bf9018c add mcstatus api 2024-06-02 14:27:00 -05:00
cobblesteve-dev
8696442e61 just a sec 2024-06-02 09:58:45 -05:00
cobblesteve-dev
ad1168da95 goodbye server checker! 2024-06-02 09:46:11 -05:00
cobblesteve
0ee38817a6
add skeleton for server checker 2024-06-02 09:40:32 -05:00
cobblesteve-dev
39cb217e47 add lots of servers and fix copy ip script 2024-06-01 10:42:19 -05:00
cobblesteve
c45cf77beb
try to fix the stupid font issues 2024-06-01 10:09:25 -05:00
cobblesteve
3025ffb114
fix something 2024-06-01 10:00:58 -05:00
cobblesteve
f99d4778b6
add some servers (after raging at JS bc its stupidly annoying) 2024-05-31 17:05:57 -05:00
cobblesteve
7114816128
Add Stampy's Lovely World :D 2024-05-31 15:45:07 -05:00
cobblesteve
40fc163e6c
a little more radius 2024-05-31 13:26:29 -05:00
cobblesteve
c00085a2be
add some border width 2024-05-31 13:24:41 -05:00
cobblesteve
b17e48e64f
add some height 2024-05-31 13:21:58 -05:00
cobblesteve
0321369d82
change 2024-05-31 13:14:15 -05:00
cobblesteve
6fe083e996
too much width!! 2024-05-31 13:08:21 -05:00
cobblesteve
670c6ddfd9
let's try something 2024-05-31 12:59:10 -05:00
cobblesteve
dcd9f4a9ff
Create placeholder.txt 2024-05-31 11:56:18 -05:00
cobblesteve
4f74aab9c2
Create README.md 2024-05-31 11:53:24 -05:00
cobblesteve
45f9a87862
Delete worlds/Skyblock.epk 2024-05-31 11:47:49 -05:00
SyntaxError52
7a3e45857c
Added Skyblock World 2024-05-29 19:16:26 -05:00
cobblesteve-dev
cf8edf0d62 i moved the clients (about time!) 2024-05-29 14:47:04 -05:00
cobblesteve
cc5cbb0d8c
Update index.html 2024-05-24 19:26:06 -05:00
cobblesteve
0fccb404ce
had to remove ayuncraft :( 2024-05-24 09:06:45 -05:00
cobblesteve
ec2498ff8a
moving the readme was NOT a good idea 😅 2024-05-24 09:04:18 -05:00
cobblesteve
5a9a391509
move some files 2024-05-24 09:01:25 -05:00
cobblesteve
3eb9502dec
delete initial client (don't need it anymore) 2024-05-24 09:00:04 -05:00
cobblesteve
24a522cbd3
move oddfutureclient 2024-05-24 08:57:07 -05:00
cobblesteve
868525a1b2
move codercraft (last one!) 2024-05-24 08:54:39 -05:00
cobblesteve
35af1ab0f7
move kerosene 2024-05-24 08:52:16 -05:00
cobblesteve
4c6e606c5a
Move Precision Client 2024-05-24 08:39:46 -05:00
cobblesteve
62435298cb
syntaxerror mispelled reading somehow 2024-05-23 17:50:16 -05:00
cobblesteve
25b9ec4143
hehheheheheheh 2024-05-23 17:47:27 -05:00
cobblesteve
b5a42d7cf9
update robots.txt 2024-05-23 17:45:12 -05:00
cobblesteve
4a130dea85
move nebula and nit 2024-05-23 17:41:06 -05:00
276 changed files with 327731 additions and 1509 deletions

3
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"liveServer.settings.port": 5502
}

View file

@ -1,28 +1,78 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="home.css" />
<link rel="shortcut icon" href="assets/icon.png" type="image/x-icon" />
<title>1.3 Clients</title>
<link rel="shortcut icon" href="assets/mc-logo.png" type="image/x-icon">
<link rel="stylesheet" href="home.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons+Round" rel="stylesheet">
</head>
<body>
<ul>
<li><a style="margin-left: 5px;" href="index.html">Home</a></li>
<li><a class="active" href="clients.html">Clients</a></li>
<li><a href="worlds.html">Worlds</a></li>
<li><a href="packs.html">Resource Packs</a></li>
<li><a href="servers.html">Servers</a></li>
<li><a href="mc quick guide/index.html" target="_blank">Quick Guide</a></li>
<li style="float: right;"><a href="https://github.com/cobblesteve01/Eaglercraft-Extras" target="_blank"><img src="assets/github.png" style="height: 25px; color: white;" alt=""></a></li>
</ul>
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet"
/>
<script src="loader.js" defer></script>
<script src="sounds.js" defer></script>
</head>
<body>
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-B23XL7G2NK"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
<h1 align="center" style="font-size: 54px; margin-bottom: -10px; text-decoration: none">1.3 Clients</h1>
<p align="center" style='font-family: inter-medium;'>There is only one 💀</p>
gtag("config", "G-B23XL7G2NK");
</script>
<style>
body,
html {
background: url("assets/pano.png");
background-attachment: fixed;
background-size: cover;
background-repeat: repeat-x;
margin: 0;
animation: panorama 75s linear infinite;
}
<div class="container">
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Eagler 1.3<p style="font-size: 14px; padding-bottom: 15px;">Version: Eaglercraft 1.3</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="eagler1.3.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
</div>
@keyframes panorama {
0% {
background-position: 0;
}
100% {
background-position: calc(100vh / 144 * -820);
}
}
</style>
<center>
<h1
style="
font-size: xxx-large;
text-shadow: 2px 2px 2px black;
margin-bottom: 0;
"
>
1.3 Clients
</h1>
<p class="splash-text">
<a
href="/"
class="github-link"
style="color: yellow; font-size: 17px; margin-top: -10px"
>Back home</a
>
</p>
<div class="vflex" id="container" style="justify-content: center">
<!--load clients into here-->
<div id="cclients">
<ul id="clients"></ul>
</div>
</div>
</center>
<div class="backdrop-blur"></div>
</body>
</html>

100
1.5.html
View file

@ -1,40 +1,72 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="home.css" />
<link rel="shortcut icon" href="assets/icon.png" type="image/x-icon" />
<title>1.5 Clients</title>
<link rel="shortcut icon" href="assets/mc-logo.png" type="image/x-icon">
<link rel="stylesheet" href="home.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons+Round" rel="stylesheet">
</head>
<body>
<ul>
<li><a style="margin-left: 5px;" href="index.html">Home</a></li>
<li><a class="active" href="clients.html">Clients</a></li>
<li><a href="worlds.html">Worlds</a></li>
<li><a href="packs.html">Resource Packs</a></li>
<li><a href="servers.html">Servers</a></li>
<li><a href="mc quick guide/index.html" target="_blank">Quick Guide</a></li>
<li style="float: right;"><a href="https://github.com/cobblesteve01/Eaglercraft-Extras" target="_blank"><img src="assets/github.png" style="height: 25px; color: white;" alt=""></a></li>
</ul>
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet"
/>
<script src="sounds.js" defer></script>
<script src="loader.js" defer></script>
</head>
<body>
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-B23XL7G2NK"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
<h1 align="center" style="font-size: 54px; margin-bottom: -10px; text-decoration: none">1.5 Clients</h1>
<p align="center" style='font-family: inter-medium;'>Take your pick.</p>
gtag("config", "G-B23XL7G2NK");
</script>
<style>
body,
html {
background: url("assets/pano.png");
background-attachment: fixed;
background-size: cover;
background-repeat: repeat-x;
margin: 0;
animation: panorama 95s linear infinite;
}
<div class="container">
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Eagler 1.5<p style="font-size: 14px; padding-bottom: 15px;">Version: Service Pack #1</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="clients/1.5/eagler1.5.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Precision Client<p style="font-size: 14px; padding-bottom: 15px;">Version: Unknown</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="PrecisionClient.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Ayuncraft<p style="font-size: 14px; padding-bottom: 15px;">Version: Ayuncraft Web</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="clients/1.5/ayunami-1.5.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">NitClient<p style="font-size: 14px; padding-bottom: 15px;">Version: NitClient 2.0</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="nitclient.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Nebula<p style="font-size: 14px; padding-bottom: 15px;">Updated: 11/21/23</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="nebula.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
</div>
@keyframes panorama {
0% {
background-position: 0;
}
<div class="container">
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Kerosene<p style="font-size: 14px; padding-bottom: 15px;">Updated: 11/21/23</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="kerosene.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">CoderCraft<p style="font-size: 14px; padding-bottom: 15px;">Updated: 11/21/23</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="codercraft.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Odd Future Client<p style="font-size: 14px; padding-bottom: 15px;">Updated: 6/1/22</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="oddfutureclient.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">FuchsiaX<p style="font-size: 14px; padding-bottom: 15px;">FuchsiaX Web</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="clients/1.5/fuchsiax.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Nova Client<p style="font-size: 14px; padding-bottom: 15px;">Version: 1.0 (First Release)</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="warning.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
</div>
100% {
background-position: calc(100vh / 144 * -820);
}
}
</style>
<center>
<h1 style="font-size: xxx-large; text-shadow: 2px 2px 2px black; margin-bottom: 0;">1.5 Clients</h1>
<p class="splash-text">
<a
href="/"
class="github-link"
style="color: yellow; font-size: 17px; margin-top: -10px;"
>Back home</a
>
</p>
<div class="vflex" id="container" style="justify-content: center;">
<!--load clients into here-->
<div id="cclients">
<ul id="clients">
</ul>
</div>
</div>
</center>
<div class="backdrop-blur"></div>
</body>
</html>

103
1.8.html
View file

@ -1,45 +1,72 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="home.css" />
<link rel="shortcut icon" href="assets/icon.png" type="image/x-icon" />
<title>1.8 Clients</title>
<link rel="shortcut icon" href="assets/mc-logo.png" type="image/x-icon">
<link rel="stylesheet" href="home.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet">
</head>
<body>
<ul>
<li><a style="margin-left: 5px;" href="index.html">Home</a></li>
<li><a class="active" href="clients.html">Clients</a></li>
<li><a href="worlds.html">Worlds</a></li>
<li><a href="packs.html">Resource Packs</a></li>
<li><a href="servers.html">Servers</a></li>
<li><a href="mc quick guide/index.html" target="_blank">Quick Guide</a></li>
<li style="float: right;"><a href="https://github.com/cobblesteve01/Eaglercraft-Extras" target="_blank"><img src="assets/github.png" style="height: 25px; color: white;" alt=""></a></li>
</ul>
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet"
/>
<script src="sounds.js" defer></script>
<script src="loader.js" defer></script>
</head>
<body>
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-B23XL7G2NK"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
<h1 align="center" style="font-size: 54px; margin-bottom: -10px; text-decoration: none">1.8 Clients</h1>
<p align="center" style='font-family: inter-medium;'>Take your pick.</p>
gtag("config", "G-B23XL7G2NK");
</script>
<style>
body,
html {
background: url("assets/pano.png");
background-attachment: fixed;
background-size: cover;
background-repeat: repeat-x;
margin: 0;
animation: panorama 95s linear infinite;
}
<br><br>
@keyframes panorama {
0% {
background-position: 0;
}
<div class="container">
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">EaglercraftX<p style="font-size: 14px; padding-bottom: 15px;">Version: u30</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding-top: 10px; padding-bottom: 10px; padding-right: 40px; padding-left: 40px;" href="clients/1.8/EaglercraftX.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Eagler Reborn<p style="font-size: 14px; padding-bottom: 15px;">Version: 1.1</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="clients/1.8/Eagler-Reborn.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Shadow Client<p style="font-size: 14px; padding-bottom: 15px;">Version: 3.0 (Beta)</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="clients/1.8/shadowclient30beta.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
</div>
<div class="container">
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">Pi Client<p style="font-size: 14px; padding-bottom: 15px;">Version: 1.0 (First Release)</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="clients/1.8/pi-client.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">DragonX Lite<p style="font-size: 14px; padding-bottom: 15px;">Version: DragonX Lite</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="clients/1.8/DragonXLite.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
<button class="button" style="height: 200px; margin: 15px; cursor: unset;">DragonX<p style="font-size: 14px; padding-bottom: 15px;">Version: DragonX V4</p><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding: 10px; padding-right: 40px; padding-left: 40px;" href="clients/1.8/DragonX_V4.html"><span class="material-icons-round">play_circle</span>&nbsp;Play</a></button><br>
</div>
</body>
100% {
background-position: calc(100vh / 144 * -820);
}
}
</style>
<center>
<h1 style="font-size: xxx-large; text-shadow: 2px 2px 2px black; margin-bottom: 0;">1.8 Clients</h1>
<p class="splash-text">
<a
href="/"
class="github-link"
style="color: yellow; font-size: 17px; margin-top: -10px;"
>Back home</a
>
</p>
<div class="vflex" id="container" style="justify-content: center;">
<!--load clients into here-->
<div id="cclients">
<ul id="clients">
</ul>
</div>
</div>
</center>
<div class="backdrop-blur"></div>
</body>
</html>

View file

@ -1,30 +1,25 @@
# Welcome to Eaglercraft Extras!
This is a website similar to EaglerCrack (if you know it) where you can find all things related to Eaglercraft!
There are currently 3 developers, and I am trying to update this as much as possible for it to be the best it can be.
I recomment looking through some of the features below!
# Welcome to Eaglercraft Extras!!!!
The best addons website for Eaglercraft. Constantly updated to bring you the latest versions of Eagler, and providing you with other clients, texture packs, and more!
## Features
- Find pre-built worlds to download and play!
- Search for servers to play with other people!
- Download resource packs to customize your Eaglercraft!
- Look at a <b>giant</b> selection of clients to play on!
- Download skins for Eaglercraft!
- See our built-in Quick Guide made by Thundiverter!
- Download skins for your Eaglercraft character!
- We have 1.3, 1.5, and 1.8 clients for Eaglercraft!
- The best part? It's 100% <u>free!</u>
## Meet the Developers
### Hey there! I'm cobblesteve.
I started this project in April, and I wanted it to become the alternative for EaglerCrack.
I'm making it for a website I have right now, which currently uses EaglerCrack as a source.
### Hey there! I'm x8r.
I started this project in April 2024, and I wanted it to become the alternative for Eaglercrack.
I'm making it for a website I have right now, which currently uses Eaglercrack as a source.
About Me:
- Knows HTML and CSS
- Learning JavaScript and Python
- Barely knows Python
- Has a YouTube channel >>> https://youtube.com/@cobblesteve.official
- Knows HTML, CSS, Javascript, Typescript, and Svelte
- Learning Astro and Node
- Likes to play Minecraft, Geometry Dash, A Dance of Fire and Ice (ADOFAI), and more!
- yea :D
### Hey there! I'm SyntaxError52.
@ -32,13 +27,11 @@ Here are some things about me:
- Knows HTML, CSS, and Python
- Learning JavaScript
- Barely knows JavaScript
- yea :D
### Hey there! I'm SprintingSnail69.
- Knows HTML, CSS, and a little JavaScript
- Learning more JavaScript
- Has a YouTube channel --> https://youtube.com/@SprintingSnailBS
- Insane at Brawl Stars, Clash Royale, and Clash of Clans
### Hey there! I'm Bahabryra.
Here are some things about me:
- Knows HTML, CSS, and Scratch
- Learning Python and JavaScript
- Barely knows Python and Javascript
- yea :D
### Thanks to Thundiverter for making the quickguide!

View file

@ -1,5 +0,0 @@
## Some clients aren't safe!
Use these at your own risk. Some problems are glitching screens, keybinds changing, etc.
These clients can be malicious, but we can't tell which ones. That's why we need **you!**
You can help us identify these clients by telling us which ones in the discussions section.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/Minecraft.woff2 Normal file

Binary file not shown.

BIN
assets/bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
assets/btn-minecraft.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
assets/click.ogg Normal file

Binary file not shown.

BIN
assets/dirt.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
assets/font.ttf Normal file

Binary file not shown.

BIN
assets/home.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

BIN
assets/hover.ogg Normal file

Binary file not shown.

BIN
assets/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

BIN
assets/intro.mp4 Normal file

Binary file not shown.

0
assets/json/1.11.json Normal file
View file

0
assets/json/1.14.json Normal file
View file

9
assets/json/1.3.json Normal file
View file

@ -0,0 +1,9 @@
[
{
"name": "EaglercraftX 1.3",
"version": "Unknown",
"url": "/clients/1.3/eagler1.3.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "lax1dude"
}
]

65
assets/json/1.5.json Normal file
View file

@ -0,0 +1,65 @@
[
{
"name": "EaglercraftX 1.5",
"version": "Service Pack #1",
"url": "/clients/1.5/eagler1.5.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "lax1dude and ayunami2000"
},
{
"name": "Precision Client",
"version": "Unknown",
"url": "/clients/1.5/PrecisionClient.html",
"icon": "/assets/precision.png",
"author": "LazerXTeam"
},
{
"name": "NitClient",
"version": "2.0",
"url": "/clients/1.5/nitclient.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "Unknown"
},
{
"name": "Nebula",
"version": "Service Pack #1",
"url": "/clients/1.5/nebula.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "eviuhu9fvhfudiaefuieavnui"
},
{
"name": "Kerosene",
"version": "Unknown",
"url": "/clients/1.5/kerosene.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "Anonymous"
},
{
"name": "CoderCraft",
"version": "November 21st 2023",
"url": "/clients/1.5/codercraft.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "AriesTropixDev"
},
{
"name": "Odd Future Client",
"version": "June 1st 2022",
"url": "/clients/1.5/oddfutureclient.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "AriesTropixDev"
},
{
"name": "FuchsiaX",
"version": "FuchsiaX Web",
"url": "/clients/1.5/fuchsiax.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "ayunami2000"
},
{
"name": "Nova Client",
"version": "1.0",
"url": "/clients/1.5/N0VA CLIENT.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "A3R10"
}
]

44
assets/json/1.8.json Normal file
View file

@ -0,0 +1,44 @@
[
{
"name": "EaglercraftX",
"version": "u53",
"url": "/clients/1.8/eaglercraftx.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "lax1dude, ayunami2000"
},
{
"name": "Shadow Client",
"version": "3.0 Beta",
"url": "/clients/1.8/shadowclient30beta.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "PeytonPlayz595"
},
{
"name": "Starlike Client",
"version": "Unknown",
"url": "/clients/1.8/Starlike_Client.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "zumbiepig"
},
{
"name": "Pi Client",
"version": "1.0",
"url": "/clients/1.8/pi-client.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "SnesLover22"
},
{
"name": "DragonX Lite",
"version": "4.0",
"url": "/clients/1.8/DragonXLite.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "averycoolusername"
},
{
"name": "DragonX",
"version": "4.0",
"url": "/clients/1.8/DragonX_V4.html",
"icon": "/assets/eaglercraftx.jpg",
"author": "3TERN4LF1R3"
}
]

0
assets/json/1.9.json Normal file
View file

0
assets/json/mobile.json Normal file
View file

62
assets/json/packs.json Normal file
View file

@ -0,0 +1,62 @@
[
{
"name": "Blue 128x",
"icon": "/assets/packs/blue128.png",
"author": "Latenci",
"url": "/packs/!%20%C2%A79Blue%20%C2%A77Revamp%20%C2%A78%C2%A7f128x%C2%A78.zip"
},
{
"name": "Nebula 16x",
"icon": "https://i.ytimg.com/vi/57zOso31fdw/maxresdefault.jpg",
"author": "Akooa, ItzStef",
"url": "/packs/!%20%20%20%20%20%20%C2%A7bnebu%C2%A73l%C2%A7ba%20%C2%A78[%C2%A7f16%C2%A75x%C2%A78].zip"
},
{
"name": "Nicofruit 16x",
"icon": "https://i.ytimg.com/vi/hf_c4-a1SYs/maxresdefault.jpg",
"author": "kenopacks, NotNico",
"url": "/packs/!%20%20%20%20%C2%A7bNico%C2%A73Fruit%20%C2%A7f[16x]%20.zip"
},
{
"name": "Bombie's 180k 16x",
"icon": "https://i.ytimg.com/vi/-XopXelFSHM/maxresdefault.jpg",
"author": "Tori, Bombie",
"url": "/packs/!%20%20%20%20%20%20%20%20%20%C2%A7b%C2%A7lBombies%20%C2%A78[%C2%A7f180k%C2%A78].zip"
},
{
"name": "Lunar 16x",
"icon": "https://i.ytimg.com/vi/p24vp0JNTgw/maxresdefault.jpg",
"author": "lunox",
"url": "/packs/!%20%20%20%20%20%20%20Lunar%20[%C2%A7816x%C2%A7f].zip"
},
{
"name": "Fatcat 16x",
"icon": "https://i.ytimg.com/vi/pzA8x768f7w/maxresdefault.jpg",
"author": "looshy",
"url": "/packs/!%20%20%20%20%20%C2%A7bfat%20cat%20%C2%A7f[%C2%A7b16%C2%A77x%C2%A7f].zip"
},
{
"name": "Toxica 16x",
"icon": "https://i.ytimg.com/vi/k7j32FTGzQY/maxresdefault.jpg",
"author": "Rh56",
"url": "/packs/!%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%C2%A75t%C3%B3xica%20%C2%A7816x.zip"
},
{
"name": "XLEXXD v3 16x",
"icon": "https://pvprp.com/assets/packs/xlexxdd/14767/banner.png?v=2025-09-17%2004:46:38",
"author": "xlexxdd",
"url": "/packs/!%20%20%C2%A7bxlexxd%20v3%20%C2%A78[%C2%A7f16x%C2%A78].zip"
},
{
"name": "Dynamic Duo 32x",
"icon": "https://i.ytimg.com/vi/2EZ4d4UX_Gs/maxresdefault.jpg",
"author": "iSparkton",
"url": "/packs/!%20%C2%A7bDynamic%20%C2%A77Duo%20%C2%A78Revamp%20%C2%A78[%C2%A7732x%C2%A78].zip"
},
{
"name": "Nebula 32x",
"icon": "https://i.ytimg.com/vi/mCxuobFmvQ0/maxresdefault.jpg",
"author": "Akooa, ItzStef",
"url": "/packs/!%20%20%20%20%20%20%C2%A7bnebu%C2%A73l%C2%A7ba%20%C2%A78[%C2%A7f32%C2%A75x%C2%A78].zip"
}
]

8
assets/json/worlds.json Normal file
View file

@ -0,0 +1,8 @@
[
{
"name": "Skyblock",
"icon": "/worlds/images/skyblock.png",
"author": "x8r",
"url": "/worlds/Skyblock.epk"
}
]

BIN
assets/mcbold.otf Normal file

Binary file not shown.

BIN
assets/menu2.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/minecraft_font.ttf Normal file

Binary file not shown.

BIN
assets/packs/blue128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 848 KiB

BIN
assets/pano.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

BIN
assets/panorama.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 KiB

BIN
assets/play.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
assets/precision.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
assets/servers/aeon.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

BIN
assets/servers/ap.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

BIN
assets/servers/arch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
assets/servers/cc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
assets/servers/clever.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 KiB

BIN
assets/servers/gg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

BIN
assets/servers/mc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
assets/servers/tl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
assets/servers/zentic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

BIN
assets/servers/zyth.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
assets/title.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View file

@ -1,34 +1,66 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="home.css" />
<link rel="shortcut icon" href="assets/icon.png" type="image/x-icon" />
<title>Clients</title>
<link rel="shortcut icon" href="assets/mc-logo.png" type="image/x-icon">
<link rel="stylesheet" href="home.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet">
</head>
<body>
<ul>
<li><a style="margin-left: 5px;" href="index.html">Home</a></li>
<li><a class="active" href="clients.html">Clients</a></li>
<li><a href="worlds.html">Worlds</a></li>
<li><a href="packs.html">Resource Packs</a></li>
<li><a href="servers.html">Servers</a></li>
<li><a href="mc quick guide/index.html" target="_blank">Quick Guide</a></li>
<li style="float: right;"><a href="https://github.com/cobblesteve01/Eaglercraft-Extras" target="_blank"><img src="assets/github.png" style="height: 25px; color: white;" alt=""></a></li>
</ul>
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet"
/>
<script src="sounds.js" defer></script>
</head>
<body>
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-B23XL7G2NK"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
<br>
gtag("config", "G-B23XL7G2NK");
</script>
<style>
body,
html {
background: url("assets/pano.png");
background-attachment: fixed;
background-size: cover;
background-repeat: repeat-x;
margin: 0;
animation: panorama 95s linear infinite;
}
<h1 align="center" style="font-size: 40px;">Choose your Version</h1>
@keyframes panorama {
0% {
background-position: 0;
}
<br><br><br><br>
<div class="container">
<button class="button" style="height: 250px; cursor: unset; margin: 15px;"><h1 style="font-size: 32px;">1.8</h1><br><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding-top: 10px; padding-bottom: 10px; padding-right: 40px; padding-left: 40px;" href="1.8.html"><span class="material-icons-round">input</span>&nbsp;Select</a></button><br>
<button class="button" style="height: 250px; cursor: unset; margin: 15px;"><h1 style="font-size: 32px;">1.5</h1><br><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding-top: 10px; padding-bottom: 10px; padding-right: 40px; padding-left: 40px;" href="1.5.html"><span class="material-icons-round">input</span>&nbsp;Select</a></button><br>
<button class="button" style="height: 250px; cursor: unset; margin: 15px;"><h1 style="font-size: 32px;">1.3</h1><br><a class="play-hover" style="text-decoration: none; color: white; border-radius: 12.5px; background-color: dodgerblue; padding-top: 10px; padding-bottom: 10px; padding-right: 40px; padding-left: 40px;" href="1.3.html"><span class="material-icons-round">input</span>&nbsp;Select</a></button><br>
</div>
100% {
background-position: calc(100vh / 144 * -820);
}
}
</style>
<center>
<h1 style="font-size: xxx-large; text-shadow: 2px 2px 2px black;">Clients</h1>
<div class="vflex">
<a href="1.3.html">
<button class="button">1.3</button>
</a>
<a href="1.5.html">
<button class="button">1.5</button>
</a>
<a href="1.8.html">
<button class="button">1.8</button>
</a>
</div>
</center>
<div class="backdrop-blur"></div>
</body>
</html>

46244
clients/1.11/eag1_11_2.html Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,21 @@
━━━━━━━━━━━━━━━━━ Copyright Eagler Devs ━━━━━━━━━━━━━━━━━
🚀 Welcome to Client Customization Instructions 🚀
Are you ready to personalize your CLIENT and take it to the next level? Follow these steps:
📦 Edit the `package.json` File:
- Open the `package.json` file for your CLIENT.
- Customize the client according to your creative vision.
🎨 Add Your Client's Source Code:
- Inject your creative genius into your client by crafting code in HTML, CSS, JS, and Python.
- Your imagination is the only limit!
🔄 Keep Your Client Updated:
- Regularly sync your client with this repository to stay up-to-date with the latest enhancements and features.
🎉 Have Fun!
- Building and customizing your CLIENT should be an enjoyable journey. Explore, create, and have a blast!
Happy coding! 🚀

4
clients/1.14/README.md Normal file
View file

@ -0,0 +1,4 @@
Eaglercraft 1.14 Revival
Hey Guys! It's The Splat Cat! Let's take a moment to look at this! You see that? Eaglerdevs was DMCA'd, so sadly, we can't play this. UNTIL NOW!!! I am currently working on reviving this! I will have to create all the assets depended on from SCRATCH! Not like scratch coding, like from THE COMPLETE BEGINNING!
Progress: 24%
Eaglercraft 1.14 Revival!

BIN
clients/1.14/assets.epk Normal file

Binary file not shown.

31382
clients/1.14/classes.js Normal file

File diff suppressed because it is too large Load diff

1
clients/1.14/client.json Normal file
View file

@ -0,0 +1 @@

View file

@ -0,0 +1,3 @@
V 0.0.3-alpha
Released at 6-10-23
Released by : AR-DEV-1 , Lead Dev , EaglerDevs

BIN
clients/1.14/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View file

@ -0,0 +1,54 @@
// fix-webm-duration source is at https://github.com/yusitnikov/fix-webm-duration
/*
* The MIT license (for fix-webm-duration)
*
* Copyright (c) 2018 Yury Sitnikov
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
(function(m,e){"function"===typeof define&&define.amd?define(e):"undefined"!==typeof module&&module.exports?module.exports=e():window.ysFixWebmDuration=e()})("fix-webm-duration",function(){function m(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function e(a,b){this.name=a||"Unknown";this.type=b||"Unknown"}function l(a,b){e.call(this,a,b||"Uint")}function k(a,b){e.call(this,a,b||"Float")}function h(a,b){e.call(this,a,b||"Container")}function n(a){h.call(this,"File","File");
this.setSource(a)}function p(a,b,c,d){"object"===typeof c&&(d=c,c=void 0);if(!c)return new Promise(function(g){p(a,b,g,d)});try{var f=new FileReader;f.onloadend=function(){try{var g=new n(new Uint8Array(f.result));g.fixDuration(b,d)&&(a=g.toBlob(a.type))}catch(q){}c(a)};f.readAsArrayBuffer(a)}catch(g){c(a)}}var r={172351395:{name:"EBML",type:"Container"},646:{name:"EBMLVersion",type:"Uint"},759:{name:"EBMLReadVersion",type:"Uint"},754:{name:"EBMLMaxIDLength",type:"Uint"},755:{name:"EBMLMaxSizeLength",
type:"Uint"},642:{name:"DocType",type:"String"},647:{name:"DocTypeVersion",type:"Uint"},645:{name:"DocTypeReadVersion",type:"Uint"},108:{name:"Void",type:"Binary"},63:{name:"CRC-32",type:"Binary"},190023271:{name:"SignatureSlot",type:"Container"},16010:{name:"SignatureAlgo",type:"Uint"},16026:{name:"SignatureHash",type:"Uint"},16037:{name:"SignaturePublicKey",type:"Binary"},16053:{name:"Signature",type:"Binary"},15963:{name:"SignatureElements",type:"Container"},15995:{name:"SignatureElementList",
type:"Container"},9522:{name:"SignedElement",type:"Binary"},139690087:{name:"Segment",type:"Container"},21863284:{name:"SeekHead",type:"Container"},3515:{name:"Seek",type:"Container"},5035:{name:"SeekID",type:"Binary"},5036:{name:"SeekPosition",type:"Uint"},88713574:{name:"Info",type:"Container"},13220:{name:"SegmentUID",type:"Binary"},13188:{name:"SegmentFilename",type:"String"},1882403:{name:"PrevUID",type:"Binary"},1868715:{name:"PrevFilename",type:"String"},2013475:{name:"NextUID",type:"Binary"},
1999803:{name:"NextFilename",type:"String"},1092:{name:"SegmentFamily",type:"Binary"},10532:{name:"ChapterTranslate",type:"Container"},10748:{name:"ChapterTranslateEditionUID",type:"Uint"},10687:{name:"ChapterTranslateCodec",type:"Uint"},10661:{name:"ChapterTranslateID",type:"Binary"},710577:{name:"TimecodeScale",type:"Uint"},1161:{name:"Duration",type:"Float"},1121:{name:"DateUTC",type:"Date"},15273:{name:"Title",type:"String"},3456:{name:"MuxingApp",type:"String"},5953:{name:"WritingApp",type:"String"},
103:{name:"Timecode",type:"Uint"},6228:{name:"SilentTracks",type:"Container"},6359:{name:"SilentTrackNumber",type:"Uint"},39:{name:"Position",type:"Uint"},43:{name:"PrevSize",type:"Uint"},35:{name:"SimpleBlock",type:"Binary"},32:{name:"BlockGroup",type:"Container"},33:{name:"Block",type:"Binary"},34:{name:"BlockVirtual",type:"Binary"},13729:{name:"BlockAdditions",type:"Container"},38:{name:"BlockMore",type:"Container"},110:{name:"BlockAddID",type:"Uint"},37:{name:"BlockAdditional",type:"Binary"},
27:{name:"BlockDuration",type:"Uint"},122:{name:"ReferencePriority",type:"Uint"},123:{name:"ReferenceBlock",type:"Int"},125:{name:"ReferenceVirtual",type:"Int"},36:{name:"CodecState",type:"Binary"},13730:{name:"DiscardPadding",type:"Int"},14:{name:"Slices",type:"Container"},104:{name:"TimeSlice",type:"Container"},76:{name:"LaceNumber",type:"Uint"},77:{name:"FrameNumber",type:"Uint"},75:{name:"BlockAdditionID",type:"Uint"},78:{name:"Delay",type:"Uint"},79:{name:"SliceDuration",type:"Uint"},72:{name:"ReferenceFrame",
type:"Container"},73:{name:"ReferenceOffset",type:"Uint"},74:{name:"ReferenceTimeCode",type:"Uint"},47:{name:"EncryptedBlock",type:"Binary"},106212971:{name:"Tracks",type:"Container"},46:{name:"TrackEntry",type:"Container"},87:{name:"TrackNumber",type:"Uint"},13253:{name:"TrackUID",type:"Uint"},3:{name:"TrackType",type:"Uint"},57:{name:"FlagEnabled",type:"Uint"},8:{name:"FlagDefault",type:"Uint"},5546:{name:"FlagForced",type:"Uint"},28:{name:"FlagLacing",type:"Uint"},11751:{name:"MinCache",type:"Uint"},
11768:{name:"MaxCache",type:"Uint"},254851:{name:"DefaultDuration",type:"Uint"},216698:{name:"DefaultDecodedFieldDuration",type:"Uint"},209231:{name:"TrackTimecodeScale",type:"Float"},4991:{name:"TrackOffset",type:"Int"},5614:{name:"MaxBlockAdditionID",type:"Uint"},4974:{name:"Name",type:"String"},177564:{name:"Language",type:"String"},6:{name:"CodecID",type:"String"},9122:{name:"CodecPrivate",type:"Binary"},362120:{name:"CodecName",type:"String"},13382:{name:"AttachmentLink",type:"Uint"},1742487:{name:"CodecSettings",
type:"String"},1785920:{name:"CodecInfoURL",type:"String"},438848:{name:"CodecDownloadURL",type:"String"},42:{name:"CodecDecodeAll",type:"Uint"},12203:{name:"TrackOverlay",type:"Uint"},5802:{name:"CodecDelay",type:"Uint"},5819:{name:"SeekPreRoll",type:"Uint"},9764:{name:"TrackTranslate",type:"Container"},9980:{name:"TrackTranslateEditionUID",type:"Uint"},9919:{name:"TrackTranslateCodec",type:"Uint"},9893:{name:"TrackTranslateTrackID",type:"Binary"},96:{name:"Video",type:"Container"},26:{name:"FlagInterlaced",
type:"Uint"},5048:{name:"StereoMode",type:"Uint"},5056:{name:"AlphaMode",type:"Uint"},5049:{name:"OldStereoMode",type:"Uint"},48:{name:"PixelWidth",type:"Uint"},58:{name:"PixelHeight",type:"Uint"},5290:{name:"PixelCropBottom",type:"Uint"},5307:{name:"PixelCropTop",type:"Uint"},5324:{name:"PixelCropLeft",type:"Uint"},5341:{name:"PixelCropRight",type:"Uint"},5296:{name:"DisplayWidth",type:"Uint"},5306:{name:"DisplayHeight",type:"Uint"},5298:{name:"DisplayUnit",type:"Uint"},5299:{name:"AspectRatioType",
type:"Uint"},963876:{name:"ColourSpace",type:"Binary"},1029411:{name:"GammaValue",type:"Float"},230371:{name:"FrameRate",type:"Float"},97:{name:"Audio",type:"Container"},53:{name:"SamplingFrequency",type:"Float"},14517:{name:"OutputSamplingFrequency",type:"Float"},31:{name:"Channels",type:"Uint"},15739:{name:"ChannelPositions",type:"Binary"},8804:{name:"BitDepth",type:"Uint"},98:{name:"TrackOperation",type:"Container"},99:{name:"TrackCombinePlanes",type:"Container"},100:{name:"TrackPlane",type:"Container"},
101:{name:"TrackPlaneUID",type:"Uint"},102:{name:"TrackPlaneType",type:"Uint"},105:{name:"TrackJoinBlocks",type:"Container"},109:{name:"TrackJoinUID",type:"Uint"},64:{name:"TrickTrackUID",type:"Uint"},65:{name:"TrickTrackSegmentUID",type:"Binary"},70:{name:"TrickTrackFlag",type:"Uint"},71:{name:"TrickMasterTrackUID",type:"Uint"},68:{name:"TrickMasterTrackSegmentUID",type:"Binary"},11648:{name:"ContentEncodings",type:"Container"},8768:{name:"ContentEncoding",type:"Container"},4145:{name:"ContentEncodingOrder",
type:"Uint"},4146:{name:"ContentEncodingScope",type:"Uint"},4147:{name:"ContentEncodingType",type:"Uint"},4148:{name:"ContentCompression",type:"Container"},596:{name:"ContentCompAlgo",type:"Uint"},597:{name:"ContentCompSettings",type:"Binary"},4149:{name:"ContentEncryption",type:"Container"},2017:{name:"ContentEncAlgo",type:"Uint"},2018:{name:"ContentEncKeyID",type:"Binary"},2019:{name:"ContentSignature",type:"Binary"},2020:{name:"ContentSigKeyID",type:"Binary"},2021:{name:"ContentSigAlgo",type:"Uint"},
2022:{name:"ContentSigHashAlgo",type:"Uint"},206814059:{name:"Cues",type:"Container"},59:{name:"CuePoint",type:"Container"},51:{name:"CueTime",type:"Uint"},55:{name:"CueTrackPositions",type:"Container"},119:{name:"CueTrack",type:"Uint"},113:{name:"CueClusterPosition",type:"Uint"},112:{name:"CueRelativePosition",type:"Uint"},50:{name:"CueDuration",type:"Uint"},4984:{name:"CueBlockNumber",type:"Uint"},106:{name:"CueCodecState",type:"Uint"},91:{name:"CueReference",type:"Container"},22:{name:"CueRefTime",
type:"Uint"},23:{name:"CueRefCluster",type:"Uint"},4959:{name:"CueRefNumber",type:"Uint"},107:{name:"CueRefCodecState",type:"Uint"},155296873:{name:"Attachments",type:"Container"},8615:{name:"AttachedFile",type:"Container"},1662:{name:"FileDescription",type:"String"},1646:{name:"FileName",type:"String"},1632:{name:"FileMimeType",type:"String"},1628:{name:"FileData",type:"Binary"},1710:{name:"FileUID",type:"Uint"},1653:{name:"FileReferral",type:"Binary"},1633:{name:"FileUsedStartTime",type:"Uint"},
1634:{name:"FileUsedEndTime",type:"Uint"},4433776:{name:"Chapters",type:"Container"},1465:{name:"EditionEntry",type:"Container"},1468:{name:"EditionUID",type:"Uint"},1469:{name:"EditionFlagHidden",type:"Uint"},1499:{name:"EditionFlagDefault",type:"Uint"},1501:{name:"EditionFlagOrdered",type:"Uint"},54:{name:"ChapterAtom",type:"Container"},13252:{name:"ChapterUID",type:"Uint"},5716:{name:"ChapterStringUID",type:"String"},17:{name:"ChapterTimeStart",type:"Uint"},18:{name:"ChapterTimeEnd",type:"Uint"},
24:{name:"ChapterFlagHidden",type:"Uint"},1432:{name:"ChapterFlagEnabled",type:"Uint"},11879:{name:"ChapterSegmentUID",type:"Binary"},11964:{name:"ChapterSegmentEditionUID",type:"Uint"},9155:{name:"ChapterPhysicalEquiv",type:"Uint"},15:{name:"ChapterTrack",type:"Container"},9:{name:"ChapterTrackNumber",type:"Uint"},0:{name:"ChapterDisplay",type:"Container"},5:{name:"ChapString",type:"String"},892:{name:"ChapLanguage",type:"String"},894:{name:"ChapCountry",type:"String"},10564:{name:"ChapProcess",
type:"Container"},10581:{name:"ChapProcessCodecID",type:"Uint"},1293:{name:"ChapProcessPrivate",type:"Binary"},10513:{name:"ChapProcessCommand",type:"Container"},10530:{name:"ChapProcessTime",type:"Uint"},10547:{name:"ChapProcessData",type:"Binary"},39109479:{name:"Tags",type:"Container"},13171:{name:"Tag",type:"Container"},9152:{name:"Targets",type:"Container"},10442:{name:"TargetTypeValue",type:"Uint"},9162:{name:"TargetType",type:"String"},9157:{name:"TagTrackUID",type:"Uint"},9161:{name:"TagEditionUID",
type:"Uint"},9156:{name:"TagChapterUID",type:"Uint"},9158:{name:"TagAttachmentUID",type:"Uint"},10184:{name:"SimpleTag",type:"Container"},1443:{name:"TagName",type:"String"},1146:{name:"TagLanguage",type:"String"},1156:{name:"TagDefault",type:"Uint"},1159:{name:"TagString",type:"String"},1157:{name:"TagBinary",type:"Binary"}};e.prototype.updateBySource=function(){};e.prototype.setSource=function(a){this.source=a;this.updateBySource()};e.prototype.updateByData=function(){};e.prototype.setData=function(a){this.data=
a;this.updateByData()};m(l,e);l.prototype.updateBySource=function(){this.data="";for(var a=0;a<this.source.length;a++){var b=this.source[a].toString(16);this.data+=1===b.length%2?"0"+b:b}};l.prototype.updateByData=function(){var a=this.data.length/2;this.source=new Uint8Array(a);for(var b=0;b<a;b++){var c=this.data.substr(2*b,2);this.source[b]=parseInt(c,16)}};l.prototype.getValue=function(){return parseInt(this.data,16)};l.prototype.setValue=function(a){var b=this.setData;a=a.toString(16);b.call(this,
1===a.length%2?"0"+a:a)};m(k,e);k.prototype.getFloatArrayType=function(){return this.source&&4===this.source.length?Float32Array:Float64Array};k.prototype.updateBySource=function(){var a=this.source.reverse();this.data=(new (this.getFloatArrayType())(a.buffer))[0]};k.prototype.updateByData=function(){var a=new (this.getFloatArrayType())([this.data]);this.source=(new Uint8Array(a.buffer)).reverse()};k.prototype.getValue=function(){return this.data};k.prototype.setValue=function(a){this.setData(a)};
m(h,e);h.prototype.readByte=function(){return this.source[this.offset++]};h.prototype.readUint=function(){var a=this.readByte(),b=8-a.toString(2).length;a-=1<<7-b;for(var c=0;c<b;c++)a*=256,a+=this.readByte();return a};h.prototype.updateBySource=function(){this.data=[];for(this.offset=0;this.offset<this.source.length;this.offset=b){var a=this.readUint();b=this.readUint();var b=Math.min(this.offset+b,this.source.length),c=this.source.slice(this.offset,b),d=r[a]||{name:"Unknown",type:"Unknown"},f=e;
switch(d.type){case "Container":f=h;break;case "Uint":f=l;break;case "Float":f=k}d=new f(d.name,d.type);d.setSource(c);this.data.push({id:a,idHex:a.toString(16),data:d})}};h.prototype.writeUint=function(a,b){for(var c=1,d=128;a>=d&&8>c;c++,d*=128);if(!b)for(a=d+a,b=c-1;0<=b;b--)d=a%256,this.source[this.offset+b]=d,a=(a-d)/256;this.offset+=c};h.prototype.writeSections=function(a){for(var b=this.offset=0;b<this.data.length;b++){var c=this.data[b],d=c.data.source,f=d.length;this.writeUint(c.id,a);this.writeUint(f,
a);a||this.source.set(d,this.offset);this.offset+=f}return this.offset};h.prototype.updateByData=function(){var a=this.writeSections("draft");this.source=new Uint8Array(a);this.writeSections()};h.prototype.getSectionById=function(a){for(var b=0;b<this.data.length;b++){var c=this.data[b];if(c.id===a)return c.data}return null};m(n,h);n.prototype.fixDuration=function(a,b){b=b&&b.logger;void 0===b?b=function(q){console.log(q)}:b||=function(){};var c=this.getSectionById(139690087);if(!c)return b("[fix-webm-duration] Segment section is missing"),
!1;var d=c.getSectionById(88713574);if(!d)return b("[fix-webm-duration] Info section is missing"),!1;var f=d.getSectionById(710577);if(!f)return b("[fix-webm-duration] TimecodeScale section is missing"),!1;var g=d.getSectionById(1161);if(g)if(0>=g.getValue())b("[fix-webm-duration] Duration section is present, but the value is empty"),g.setValue(a);else return b("[fix-webm-duration] Duration section is present"),!1;else b("[fix-webm-duration] Duration section is missing"),g=new k("Duration","Float"),
g.setValue(a),d.data.push({id:1161,data:g});f.setValue(1E6);d.updateByData();c.updateByData();this.updateByData();return!0};n.prototype.toBlob=function(a){return new Blob([this.source.buffer],{type:a||"video/webm"})};return p.default=p});

42
clients/1.14/index.html Normal file
View file

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Play minecraft 1.8.9 in your browser" />
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.9" />
<title>Eaglercraft 1.14 By EaglerDevs</title>
<meta property="og:locale" content="en-US" />
<meta property="og:type" content="website" />
<meta property="og:title" content="EaglercraftX 1.8.9" />
<meta property="og:description" content="Play minecraft 1.8.9 in your browser" />
<meta property="og:image" content="favicon.png" />
<link type="image/png" rel="shortcut icon" href="favicon.png" />
<script type="text/javascript" src="classes.js"></script>
<script type="text/javascript" src="fix-webm-duration.js"></script>
<script type="text/javascript">
window.addEventListener("load", () => {
if(document.location.href.startsWith("file:")) {
alert("HTTP please, do not open this file locally, run a local HTTP server and load it via HTTP");
}else {
window.eaglercraftXOpts = {
container: "game_frame",
assetsURI: "assets.epk",
localesURI: "lang/",
servers: [
{ addr: "wss://sus.shhnowisnottheti.me", name: "Ayunboom" },
{ addr: "wss://aeon-network.net/1.8", name: "Aeon" },
{ addr: "wss://beta.vanillacraftsmp.org/", name: "VanillaCraft" },
{ addr: "wss://mc.sealcentral.co", name: "SealCraft" },
{ addr: "wss://g.deev.is/eaglerx-reference", name: "Reference Implementation" },
{ addr: "wss://play.craftclue.rocks", name: "CraftClue"}
]
};
main();
}
});
</script>
</head>
<body style="margin:0px;width:100vw;height:100vh;overflow:hidden;" id="game_frame">
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1 @@
# Welcome to the Clients folder!
I'll move them over later (lol)

82
credits.html Normal file
View file

@ -0,0 +1,82 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="home.css" />
<link rel="shortcut icon" href="assets/icon.png" type="image/x-icon" />
<title>Credits</title>
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet"
/>
<script src="sounds.js" defer></script>
<script src="index.js" defer></script>
</head>
<body>
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-B23XL7G2NK"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-B23XL7G2NK");
</script>
<style>
body,
html {
background: url("assets/pano.png");
background-attachment: fixed;
background-size: cover;
background-repeat: repeat-x;
margin: 0;
animation: panorama 95s linear infinite;
}
@keyframes panorama {
0% {
background-position: 0;
}
100% {
background-position: calc(100vh / 144 * -820);
}
}
</style><br>
<center>
<img
src="assets/title.png"
style="margin: -50px; margin-bottom: -100px; scale: auto"
alt="the-gay-ass-dev-who-made-us-use-a-fucking-image-made-me-do-this-shit-please-help-im-stuck-in-his-fucking-liveshare-and-in-his-basement-HELP.png"
/>
<p class="splash-text">Credits</p>
<div class="vflex">
<h1>Developers</h1>
<p>x8r (xor)</p>
<p>SyntaxError52</p>
<h1>Design</h1>
<p>x8r</p>
<h1>Design Inspiration</h1>
<p>Mojang</p>
<p>Legacy Edition Minigames</p>
<h1>Website Inspiration</h1>
<p>EaglercrackX</p>
<p>Eaglercraft</p>
</div><br>
</center>
<center>
<a href="/">
<button class="button">Return Home</button>
</a>
</center><br>
<div class="backdrop-blur"></div>
</body>
</html>

24
credits.txt Normal file
View file

@ -0,0 +1,24 @@
Eaglercraft Extras Credits
------------------------------------------------
All clients, pack, skins, and server credits go to their respective authors
------------------------------------------------
>> x8r (xor)
~ head developer
~ author of loader.js (genius)
~ wrote css, html, and js
~ does most things on the website
>> SyntaxError52
~ Co-Dev of EaglercraftExtras
~ Bug fixes
~ Skins Page and Skins
~ Created help form
~ QoL changes
------------------------------------------------
To contact please go to https://forms.gle/Aj2pX9dXKSRJMzRT8 for any user requests
or contact _x8rr on discord.
------------------------------------------------
Eaglercraft Extras: v2.1.0 - 9/21/2025
BuildID: Kpz1VR

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f969a41bd33716f416b50c24024d12f2990959414098bdcb80d63a1310feca99
size 15335322

475
home.css
View file

@ -1,177 +1,406 @@
@font-face {
font-family: inter-bold;
src: url(assets/Inter-Bold.ttf);
font-family: mc;
src: url('/assets/Minecraft.woff2');
}
@font-face {
font-family: inter-semibold;
src: url(assets/Inter-SemiBold.ttf);
}
@font-face {
font-family: inter-medium;
src: url(assets/Inter-Medium.ttf);
font-family: mc bold;
src: url('/assets/mcbold.otf');
}
h1 {
font-family: inter-bold;
font-family: mc;
}
a {
cursor: pointer;
}
body,
html {
background: url("/assets/dirt.webp");
background-size: cover;
background-attachment: fixed;
color: white;
overflow-x: hidden;
}
* {
font-family: mc;
font-weight: normal;
}
body {
background: rgb(29, 29, 29);
color: white;
margin: 0;
}
h1, h2, p {
text-shadow: 2px 2px 2px black;
}
h2, h1 {
font-family: mc bold;
}
.button {
text-align: center;
border-radius: 20px;
height: 100px;
width: 250px;
font-size: 25px;
font-family: inter-semibold;
color: white;
background-color: rgb(29, 29, 29);
border-color: white;
border-width: 0.5px;
box-shadow: none;
outline: none;
border-style: solid;
cursor: pointer;
transition: 0.3s;
margin: 5px;
background: url('/assets/btn-minecraft.png');
background-size: cover;
background-repeat: no-repeat;
border: none;
width: 400px;
height: 40px;
margin: 7px;
padding: 10px 0;
scale: 120%;
cursor: pointer;
color: white;
font-size: 17px;
text-align: center;
text-shadow: 1px 1px black;
}
.clientButton {
height: 200px;
cursor: unset;
margin: 15px;
.button:hover {
background: url('/assets/btn-minecraft-hover.png');
color: yellow;
background-size: cover;
background-repeat: no-repeat;
border: none;
filter: grayscale(0%);
}
button:hover {
background-color: rgba(116, 116, 116, 0.671);
scale: 105%;
a.play-hover {
transition: 0.2s;
}
a.play-hover:hover {
filter: brightness(0.8);
}
.vflex {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
.container {
display: flex;
justify-content: center;
display: flex;
justify-content: center;
flex-wrap: wrap;
}
.big-button {
text-align: center;
border-radius: 30px;
height: 300px;
width: 455px;
font-size: 25px;
font-family: inter-semibold;
color: white;
background-color: rgb(29, 29, 29);
border-color: white;
border-width: 0.5px;
box-shadow: none;
outline: none;
border-style: solid;
cursor: pointer;
transition: 0.3s;
margin: 10px;
text-align: center;
border-radius: 00px;
height: 300px;
width: 455px;
font-size: 25px;
font-family: mc;
color: white;
background-color: rgba(0, 0, 0, 0.7);
border-color: rgba(255, 255, 255, 0);
border-width: 0.5px;
box-shadow: none;
none: none;
border-style: solid;
cursor: pointer;
transition: 0.2s;
margin: 10px;
}
.big-button:hover {
transform: translateY(-5px);
}
.center-logo {
display: block;
margin-left: auto;
margin-right: auto;
display: block;
margin-left: auto;
margin-right: auto;
}
.top-bar {
scale: 50%;
padding: 0%;
scale: 50%;
padding: 0%;
}
li {
display: inline;
float: left;
display: inline;
float: left;
font-family: mc;
vertical-align: 20px;
}
li a {
display: block;
padding: 8px;
text-decoration: none;
color: white;
text-align: center;
font-size: 20px;
transition: 0.5s;
margin-left: 2px;
margin-right: 2px;
font-family: inter-medium;
display: block;
padding: 9px;
text-decoration: none;
color: white;
text-align: center;
font-size: 20px;
transition: 0.2s;
margin-left: 5px;
margin-right: 5px;
font-family: mc;
cursor: pointer;
}
li a:hover {
background-color: rgb(56, 56, 56);
border-radius: 10px;
background-color: rgba(255, 255, 255, 0.233);
border-radius: 0px;
z-index: 9999999;
}
ul {
background-color: black;
margin: 0;
padding: 0;
overflow: hidden;
border-radius: 10px;
padding-top: 5px;
background-color: rgba(0, 0, 0, 0.7);
margin: 0;
padding: 0;
overflow: hidden;
border-radius: 0px;
padding: 8px;
font-family: mc;
position: sticky;
top: 1rem;
z-index: 99999;
}
.active {
background-color: dodgerblue;
border-radius: 10px;
background-color: #008000;
border-radius: 0px;
}
.right {
float: right;
float: right;
}
.innerbutton {
text-align: center;
border-radius: 20px;
height: 75px;
width: 200px;
font-size: 14px;
font-family: inter-semibold;
color: white;
background-color: rgb(26, 26, 26);
border-color: white;
border-width: 0.5px;
box-shadow: none;
outline: none;
border-style: solid;
cursor: pointer;
transition: 0.3s;
margin: 5px;
display: flex;
flex-wrap: wrap;
text-align: center;
border-radius: 0px;
height: 75px;
width: 200px;
font-size: 14px;
font-family: mc;
color: white;
background-color: rgb(26, 26, 26);
border-color: rgba(255, 255, 255, 0);
border-width: 0.5px;
box-shadow: none;
none: none;
border-style: solid;
cursor: pointer;
transition: 0.2s;
margin: 5px;
display: flex;
flex-wrap: wrap;
}
.material-icons-round {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 2;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
vertical-align: -2.5px;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
font-family: "Material Icons";
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 2;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
vertical-align: -2.5px;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: "liga";
}
.status {
padding-top: 5px;
padding-bottom: 5px;
border-radius: 0px;
font-size: 18px;
text-align: left;
}
.online {
color: lime;
}
.offline {
color: red;
}
.unknown {
color: goldenrod;
}
.ip {
padding-top: 10px;
padding-bottom: 10px;
padding-left: 30px;
padding-right: 30px;
background-color: #008000;
border-radius: 0px;
font-size: 20px;
}
.copyLink {
text-decoration: none;
color: white;
background-color: #008000;
padding: 10px;
padding-left: 20px;
padding-right: 20px;
border-radius: 0px;
text-align: center;
border-radius: 0px;
}
.status.online span {
color: green;
}
.status.offline span {
color: red;
}
.status.unknown span {
color: orange;
}
#clients {
align-items: center;
z-index: 0;
background: none;
}
#client {
background: rgba(0, 0, 0, 0.0);
width: 70vw;
height: 15vh;
padding: 10px;
margin: 5px;
z-index: 1;
align-self: center;
justify-content: center;
position: relative;
left: 50%;
cursor: pointer;
font-family: mc;
transform: translateX(-50%);
text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.568);
}
#client img {
position: relative;
height: 99%;
left: -42.5%;
aspect-ratio: 1/1;
}
#client h1 {
position: relative;
top: -100%;
left: 17%;
font-size: 22px;
font-weight: normal;
text-align: left;
font-family: mc;
}
#client p {
position: relative;
top: -110%;
left: 17%;
font-size: 20px;
font-weight: normal;
color: lightgray;
text-align: left;
}
.github-link {
color: white;
}
#playbtn {
position: relative;
left: .2%;
scale: 30%;
bottom: 500%;
background: rgba(0, 0, 0, 0.444);
display: none;
cursor: pointer;
}
#client a {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 2;
background: none;
}
#client:hover {
outline: #f0f0f0 solid 3px;
background: rgba(0, 0, 0, 0.6);
}
.splash-text {
color: yellow;
text-shadow: 2px 2px 4px black;
font-size: 1.4em;
font: 600;
}
#toast {
background: rgba(0, 0, 0, 0.616);
color: white;
height: 20px;
width: 200px;
position: fixed;
right: -40%;
top: 2%;
padding: 20px 30px;
outline: 3px white solid;
text-align: center;
align-items: center;
vertical-align: middle;
transition: 0.5s cubic-bezier(0.215, 0.610, 0.610, 1);
}
li > * {
pointer-events: none;
}
button:disabled {
filter: brightness(0.77);
}
button:disabled:hover {
filter: brightness(0.77);
background: url("assets/btn-minecraft.png");
color: white;
}
#introVid {
height: 100vh;
width: 100vw;
position: fixed;
top: 0;
left: 50%;
transition: 0.3s;
background: white;
transform: translateX(-50%);
border: none;
outline: none;
}
#opening {
text-shadow: 2px 2px 2px transparent;
}

View file

@ -1,40 +1,93 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="home.css">
<link rel="shortcut icon" href="assets/mc-logo.png" type="image/x-icon">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="home.css" />
<link rel="shortcut icon" href="assets/icon.png" type="image/x-icon" />
<title>Eaglercraft Extras</title>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet">
</head>
<body>
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet"
/>
<script src="sounds.js" defer></script>
<script src="index.js" defer></script>
</head>
<body>
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-B23XL7G2NK"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
<ul>
<li><a style="margin-left: 5px;" class="active" href="index.html">Home</a></li>
<li><a href="clients.html">Clients</a></li>
<li><a href="worlds.html">Worlds</a></li>
<li><a href="packs.html">Resource Packs</a></li>
<li><a href="servers.html">Servers</a></li>
<li><a href="mc quick guide/index.html" target="_blank">Quick Guide</a></li>
<li style="float: right;"><a href="https://github.com/cobblesteve01/Eaglercraft-Extras" target="_blank"><img src="assets/github.png" style="height: 25px; color: white;" alt=""></a></li>
</ul>
gtag("config", "G-B23XL7G2NK");
</script>
<style>
body,
html {
background: url("assets/pano.png");
background-attachment: fixed;
background-size: cover;
background-repeat: repeat-x;
margin: 0;
animation: panorama 95s linear infinite;
}
<br><br><br><br>
@keyframes panorama {
0% {
background-position: 0;
}
<div style="display: flex; justify-content: center;">
<img src="assets/mc-logo.png" style="height: 175px; margin-right: 25px;" alt="logo">
<h1 style="font-size: 42px; font-family: inter-bold; margin-top: 60px;">Eaglercraft Extras</h1>
</div>
<br><br>
<div class="container">
<button class="big-button"><u>Announcements</u> <br><br>Resource Packs out now! Servers coming next. Worlds will take longer as I have to create them myself.</button>
<button class="big-button">Need Help?<br><br>Fill out an issue or start a discussion! We'll be sure to get back to it.</button>
</div>
</body>
100% {
background-position: calc(100vh / 144 * -820);
}
}
</style>
<center>
<img
src="assets/title.png"
style="margin: -50px; margin-bottom: -100px; scale: auto"
alt="the-gay-ass-dev-who-made-us-use-a-fucking-image-made-me-do-this-shit-please-help-im-stuck-in-his-fucking-liveshare-and-in-his-basement-HELP.png"
/>
<p class="splash-text">
Contact us on our anonymous form
<a
href="https://forms.gle/Aj2pX9dXKSRJMzRT8"
target="_blank"
class="github-link"
style="color: yellow;"
>here</a
>.
</p>
<div class="vflex">
<a href="clients.html" class="a">
<button class="button">Clients</button>
</a>
<a href="servers.html" class="a">
<button class="button">Servers</button>
</a>
<a href="packs.html" class="a">
<button class="button">Resource Packs</button>
</a>
<a href="worlds.html" class="a">
<button class="button" onmouseover="document.getElementById('hoversound').play()">Worlds</button>
</a>
<a href="skins.html" class="a">
<button disabled class="button">Skins (In Development)</button>
</a>
<a href="credits.html" target="blank" class="a">
<button class="button">Credits</button>
</a>
</div>
</center>
<div class="backdrop-blur"></div>
<video src="assets/intro.mp4" id="introVid">
</video>
<p id="opening" style="color: black; z-index: 100; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); display: none; text-shadow: transparent;">Please Click.</p>
</body>
</html>

26
index.js Normal file
View file

@ -0,0 +1,26 @@
const vid = document.getElementById("introVid");
const p = document.getElementById("opening")
console.debug(vid)
p.style.display = "block";
const menuMusic = new Audio("/assets/menu2.ogg")
const seen = sessionStorage.getItem("seenVid")
if (seen !== "true") {
document.addEventListener("click", () => {
vid.play();
p.style.display = "none";
});
vid.addEventListener("ended", () => {
vid.style.opacity = "0";
console.log("opacity set");
setTimeout(() => {
vid.style.display = "none";
sessionStorage.setItem("seenVid", "true")
}, 300); // small delay so opacity fade is visible
});
} else {
vid.style.display = "none"
p.style.display = "none"
}

15
installguide.md Normal file
View file

@ -0,0 +1,15 @@
# How to install Worlds
To start, simply download the file
### If the file ends in .epk
1. Go to your Eaglercraft client of choice
2. Click **Singleplayer**
3. Then click **Create New World**
4. Now click **Load EPK File** and select the downloaded file
### If the file ends in .zip
1. Go to your Eaglercraft client of choice
2. Click **Singleplayer**
3. Then click **Create New World**
4. Now click **Import Vanilla World** and select the downloaded file

76
loader.js Normal file
View file

@ -0,0 +1,76 @@
/*
client json loader
(c) 2025: x8r and the eaglercraft extras team
licensed under gnu gpl v3
https://www.gnu.org/licenses/gpl-3.0.en.html
https://github.com/x8rr/
https://github.com/eaglercraftextras/
*/
// set up globals
let res;
let data;
// get doms
const clientsList = document.getElementById("clients");
// get json
async function getJSON(v) {
res = await fetch(`assets/json/${v}.json`);
data = await res.json();
}
// now load clients and append children
function loadClients(v) {
getJSON(v)
.then(() => {
console.log(`Array: ${data}`);
})
.then(() => {
data.forEach((data) => {
// create new elements
const newClient = document.createElement("li");
const newTitle = document.createElement("h1");
const newVersion = document.createElement("p");
const newLink = document.createElement("a");
const newIcon = document.createElement("img");
const newPlaybtn = document.createElement("img");
const newAuthor = document.createElement("p");
// set attributes
newClient.setAttribute("id", "client");
newTitle.setAttribute("id", "title");
newVersion.setAttribute("id", "ver");
newLink.setAttribute("id", "link");
newIcon.setAttribute("id", "icon");
newPlaybtn.setAttribute("id", "playbtn");
newAuthor.setAttribute("id", "ver");
// update content
newTitle.textContent = data.name;
newVersion.textContent = `Version: ${data.version}`;
newAuthor.textContent = `Author: ${data.author}`;
newLink.href = data.url;
newIcon.src = data.icon;
// move elements into list
clientsList.appendChild(newClient);
newClient.appendChild(newIcon);
newClient.appendChild(newTitle);
newClient.appendChild(newVersion);
newClient.appendChild(newAuthor);
newIcon.appendChild(newLink);
newClient.appendChild(newLink);
newLink.appendChild(newPlaybtn);
});
});
}
if (window.location.href.includes("1.8.html")) {
loadClients("1.8");
} else if (window.location.href.includes("1.5.html")) {
loadClients("1.5");
} else {
loadClients("1.3");
}

View file

@ -1,216 +0,0 @@
<!DOCTYPE html>
<html lang="en" class="translated-ltr"><head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Minecraft Quick Guide</title>
<link rel="shortcut icon" href="images/knowledge_book.png" type="image/x-icon">
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="fonts/inter.css">
<link type="text/css" rel="stylesheet" charset="UTF-8" href="https://www.gstatic.com/_/translate_http/_/ss/k=translate_http.tr.26tY-h6gH9w.L.W.O/am=AgM/d=0/rs=AN8SPfrixlL1amy8r1f0UQHcZ2HL9amUjg/m=el_main_css"></head>
<body>
<header>
<img src="images/knowledge_book.png" width="48px">
<h1><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Minecraft Quick Guide</font></font></h1>
<a href="/" style="font-weight: 600; background-color: #363636;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Potions</font></font></a>
<!--<a href="#">Зачарования</a>
<a href="#">Рецепты</a>-->
</header>
<div style="width: 100%; height: 64px; user-select: none;"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">none</font></font></div>
<section>
<h2><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Potions</font></font></h2>
<ul>
<li><img src="images/redstone.png"> <b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Redstone</font></font></b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> increases the duration of effects. Weakens enhanced potions.</font></font></li>
<li><img src="images/glowstone_dust.png"> <b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Glowstone Dust</font></font></b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> enhances effects, but reduces their duration.</font></font></li>
<li><img src="images/gunpowder.png"> <b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Gunpowder</font></font></b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> makes potions explosive.</font></font></li>
<li><img src="images/dragon_breath.png"> <b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Dragon's Breath</font></font></b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> makes potions foggy (settling).</font></font></li>
</ul>
<table>
<!-- Header -->
<tbody><tr>
<th rowspan="2"></th>
<th rowspan="2"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Name</font></font></th>
<th colspan="3"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Effect (duration)</font></font></th>
<th rowspan="2"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Recipe</font></font></th>
</tr>
<tr>
<th width="20%"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">No amplifiers</font></font></th>
<th width="20%"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">+</font></font><img src="images/redstone.png"></th>
<th width="20%"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">+</font></font><img src="images/glowstone_dust.png"></th>
</tr>
<!-- Мутное зелье -->
<tr>
<td><img src="images/potions/water_bottle.png"></td>
<td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Cloudy Potion</font></font></td>
<td><span style="color: #aaaaaa"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">No effect</font></font></span></td>
<td><span style="color: #aaaaaa"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"></font></font></span></td>
<td><span style="color: #aaaaaa"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"></font></font></span></td>
<td><ul>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Base:</font></font></b> <img src="images/potions/water_bottle.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> water flask</font></font></li>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ingredient:</font></font></b> <img src="images/nether_wart.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Nether Wart</font></font></li>
</ul></td>
</tr>
<!-- Зелье ночного зрения -->
<tr>
<td><img src="images/potions/night_vision_potion.png"></td>
<td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Night Vision Potion</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Night Vision (3:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Allows you to see much better in the dark.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Night Vision (8:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Allows you to see much better in the dark.</font></font></td>
<td><span style="color: #aaaaaa"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"></font></font></span></td>
<td><ul>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Base:</font></font></b> <img src="images/potions/water_bottle.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Cloudy Potion</font></font></li>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ingredient:</font></font></b> <img src="images/golden_carrot.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Golden Carrot</font></font></li>
</ul></td>
</tr>
<!-- Зелье невидимости -->
<tr>
<td><img src="images/potions/invisibility_potion.png"></td>
<td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Invisibility potion</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Invisibility (3:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> The player becomes invisible.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Invisibility (8:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> The player becomes invisible.</font></font></td>
<td style="color: #aaa"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"></font></font></td>
<td><ul>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Base:</font></font></b> <img src="images/potions/water_bottle.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Cloudy Potion</font></font></li>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ingredient:</font></font></b> <img src="images/fermented_spider_eye.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Pickled Spider Eye</font></font></li>
</ul></td>
</tr>
<!-- Зелье прыгучести -->
<tr>
<td><img src="images/potions/leaping_potion.png"></td>
<td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Potion of Jumping</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Jumping (3:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Allows you to jump ½ block higher.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Jumping (8:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Allows you to jump ½ block higher.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Jumping II (1:30):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Allows you to jump 1 ¼ blocks higher.</font></font></td>
<td><ul>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Base:</font></font></b> <img src="images/potions/water_bottle.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Cloudy Potion</font></font></li>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ingredient:</font></font></b> <img src="images/rabbit_foot.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> rabbit's foot</font></font></li>
</ul></td>
</tr>
<!-- Зелье огнестойкости -->
<tr>
<td><img src="images/potions/fire_resistance_potion.png"></td>
<td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Potion of Fire Resistance</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Fire Resistance (3:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Immunity to damage from lava, magma blocks, bonfires, and efreeti alike.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Fire Resistance (8:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Immunity to damage from lava, magma blocks, bonfires, and efreeti alike.</font></font></td>
<td style="color: #aaa"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"></font></font></td>
<td><ul>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Base:</font></font></b> <img src="images/potions/water_bottle.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Cloudy Potion</font></font></li>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ingredient:</font></font></b> <img src="images/rabbit_foot.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Magma Clump</font></font></li>
</ul></td>
</tr>
<!-- Зелье стремительности -->
<tr>
<td><img src="images/potions/swiftness_potion.png"></td>
<td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Potion of Swiftness</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Speed (3:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Increases movement speed by 20%.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Speed (8:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Increases movement speed by 20%.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Speed II (1:30):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Increases movement speed by 40%.</font></font></td>
<td><ul>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Base:</font></font></b> <img src="images/potions/water_bottle.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Cloudy Potion</font></font></li>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ingredient:</font></font></b> <img src="images/sugar.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> sugar</font></font></li>
</ul></td>
</tr>
<!-- Зелье водного дыхания -->
<tr>
<td><img src="images/potions/water_breathing_potion.png"></td>
<td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Water Breathing Potion</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Water Breathing (3:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Allows you to not breathe underwater.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Water Breathing (8:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Allows you to avoid breathing underwater.</font></font></td>
<td style="color: #aaa"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"></font></font></td>
<td><ul>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Base:</font></font></b> <img src="images/potions/water_bottle.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Cloudy Potion</font></font></li>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ingredient:</font></font></b> <img src="images/pufferfish.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Pufferfish</font></font></li>
</ul></td>
</tr>
<!-- Зелье исцеления -->
<tr>
<td><img src="images/potions/healing_potion.png"></td>
<td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Healing Potion</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Healing:</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> +4 units. health ( </font></font><img src="images/full_heart.png" id="h"><img src="images/full_heart.png" id="h"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">).</font></font></td>
<td style="color: #aaa"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"></font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Healing II:</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> +8 units. health ( </font></font><img src="images/full_heart.png" id="h"><img src="images/full_heart.png" id="h"><img src="images/full_heart.png" id="h"><img src="images/full_heart.png" id="h"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">)</font></font></td>
<td><ul>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Base:</font></font></b> <img src="images/potions/water_bottle.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Cloudy Potion</font></font></li>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ingredient:</font></font></b> <img src="images/glistering_melon_slice.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Sparkling Watermelon Slice</font></font></li>
</ul></td>
</tr>
<!-- Зелье регенерации -->
<tr>
<td><img src="images/potions/regeneration_potion.png"></td>
<td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Regeneration Potion</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Regeneration (0:45):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Restores 1 unit. health ( </font></font><img src="images/half_heart.png" id="h"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">) every 2.5 seconds.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Regeneration (1:30):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Restores 1 unit. health ( </font></font><img src="images/half_heart.png" id="h"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">) every 2.5 seconds.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Regeneration II (0:22):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Restores 1 unit. health ( </font></font><img src="images/half_heart.png" id="h"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">) every 1.2 seconds.</font></font></td>
<td><ul>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Base:</font></font></b> <img src="images/potions/water_bottle.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Cloudy Potion</font></font></li>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ingredient:</font></font></b> <img src="images/ghast_tear.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Ghast Tear</font></font></li>
</ul></td>
</tr>
<!-- Зелье силы -->
<tr>
<td><img src="images/potions/strength_potion.png"></td>
<td><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Potion of Strength</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Strength (3:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Increases the player's damage dealt by 3.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Strength (8:00):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Increases the player's damage dealt by 3.</font></font></td>
<td><b style="color: #5555ff"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Strength II (1:30):</font></font></b><br><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Increases the player's damage dealt by 6.</font></font></td>
<td><ul>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Base:</font></font></b> <img src="images/potions/water_bottle.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Cloudy Potion</font></font></li>
<li><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ingredient:</font></font></b> <img src="images/blaze_powder.png"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Fire Powder</font></font></li>
</ul></td>
</tbody></table>
</section>
<div id="madebythundiverter">
Made by <a href="https://thundiverter.github.io">Thundiverter</a> &nbsp; &nbsp; Translated by <a href="github.com/cobblesteve01" target="_blank">cobblesteve01</a>
</div>
<!-- Code injected by live-server -->
<script>
// <![CDATA[ <-- For SVG support
if ('WebSocket' in window) {
(function () {
function refreshCSS() {
var sheets = [].slice.call(document.getElementsByTagName("link"));
var head = document.getElementsByTagName("head")[0];
for (var i = 0; i < sheets.length; ++i) {
var elem = sheets[i];
var parent = elem.parentElement || head;
parent.removeChild(elem);
var rel = elem.rel;
if (elem.href && typeof rel != "string" || rel.length == 0 || rel.toLowerCase() == "stylesheet") {
var url = elem.href.replace(/(&|\?)_cacheOverride=\d+/, '');
elem.href = url + (url.indexOf('?') >= 0 ? '&' : '?') + '_cacheOverride=' + (new Date().valueOf());
}
parent.appendChild(elem);
}
}
var protocol = window.location.protocol === 'http:' ? 'ws://' : 'wss://';
var address = protocol + window.location.host + window.location.pathname + '/ws';
var socket = new WebSocket(address);
socket.onmessage = function (msg) {
if (msg.data == 'reload') window.location.reload();
else if (msg.data == 'refreshcss') refreshCSS();
};
if (sessionStorage && !sessionStorage.getItem('IsThisFirstTime_Log_From_LiveServer')) {
console.log('Live reload enabled.');
sessionStorage.setItem('IsThisFirstTime_Log_From_LiveServer', true);
}
})();
}
else {
console.error('Upgrade your browser. This Browser is NOT supported WebSocket for Live-Reloading.');
}
// ]]>
</script><div id="goog-gt-tt" class="VIpgJd-yAWNEb-L7lbkb skiptranslate" style="border-radius: 12px; margin: 0 0 0 -23px; padding: 0; font-family: 'Google Sans', Arial, sans-serif;" data-id=""><div id="goog-gt-vt" class="VIpgJd-yAWNEb-hvhgNd"><div class=" VIpgJd-yAWNEb-hvhgNd-l4eHX-i3jM8c"><img src="https://fonts.gstatic.com/s/i/productlogos/translate/v14/24px.svg" width="24" height="24" alt=""></div><div class=" VIpgJd-yAWNEb-hvhgNd-k77Iif-i3jM8c"><div class="VIpgJd-yAWNEb-hvhgNd-IuizWc" dir="ltr">Original text</div><div id="goog-gt-original-text" class="VIpgJd-yAWNEb-nVMfcd-fmcmS VIpgJd-yAWNEb-hvhgNd-axAV1"></div></div><div class="VIpgJd-yAWNEb-hvhgNd-N7Eqid ltr"><div class="VIpgJd-yAWNEb-hvhgNd-N7Eqid-B7I4Od ltr" dir="ltr"><div class="VIpgJd-yAWNEb-hvhgNd-UTujCb">Rate this translation</div><div class="VIpgJd-yAWNEb-hvhgNd-eO9mKe">Your feedback will be used to help improve Google Translate</div></div><div class="VIpgJd-yAWNEb-hvhgNd-xgov5 ltr"><button id="goog-gt-thumbUpButton" type="button" class="VIpgJd-yAWNEb-hvhgNd-bgm6sf" title="Good translation" aria-label="Good translation" aria-pressed="false"><span id="goog-gt-thumbUpIcon"><svg width="24" height="24" viewBox="0 0 24 24" focusable="false" class="VIpgJd-yAWNEb-hvhgNd-THI6Vb NMm5M"><path d="M21 7h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 0S7.08 6.85 7 7H2v13h16c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73V9c0-1.1-.9-2-2-2zM7 18H4V9h3v9zm14-7l-3 7H9V8l4.34-4.34L12 9h9v2z"></path></svg></span><span id="goog-gt-thumbUpIconFilled"><svg width="24" height="24" viewBox="0 0 24 24" focusable="false" class="VIpgJd-yAWNEb-hvhgNd-THI6Vb NMm5M"><path d="M21 7h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 0S7.08 6.85 7 7v13h11c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73V9c0-1.1-.9-2-2-2zM5 7H1v13h4V7z"></path></svg></span></button><button id="goog-gt-thumbDownButton" type="button" class="VIpgJd-yAWNEb-hvhgNd-bgm6sf" title="Poor translation" aria-label="Poor translation" aria-pressed="false"><span id="goog-gt-thumbDownIcon"><svg width="24" height="24" viewBox="0 0 24 24" focusable="false" class="VIpgJd-yAWNEb-hvhgNd-THI6Vb NMm5M"><path d="M3 17h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 24s7.09-6.85 7.17-7h5V4H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2zM17 6h3v9h-3V6zM3 13l3-7h9v10l-4.34 4.34L12 15H3v-2z"></path></svg></span><span id="goog-gt-thumbDownIconFilled"><svg width="24" height="24" viewBox="0 0 24 24" focusable="false" class="VIpgJd-yAWNEb-hvhgNd-THI6Vb NMm5M"><path d="M3 17h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 24s7.09-6.85 7.17-7V4H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2zm16 0h4V4h-4v13z"></path></svg></span></button></div></div><div id="goog-gt-votingHiddenPane" class="VIpgJd-yAWNEb-hvhgNd-aXYTce"><form id="goog-gt-votingForm" action="//translate.googleapis.com/translate_voting?client=te_lib" method="post" target="votingFrame" class="VIpgJd-yAWNEb-hvhgNd-aXYTce"><input type="text" name="sl" id="goog-gt-votingInputSrcLang"><input type="text" name="tl" id="goog-gt-votingInputTrgLang"><input type="text" name="query" id="goog-gt-votingInputSrcText"><input type="text" name="gtrans" id="goog-gt-votingInputTrgText"><input type="text" name="vote" id="goog-gt-votingInputVote"></form><iframe name="votingFrame" frameborder="0"></iframe></div></div></div>
</body></html>

View file

@ -1,78 +0,0 @@
body {
margin: 0;
font-family: Inter;
background-color: #121212;
}
header {
position: fixed;
display: flex;
width: 100%;
flex-direction: row; justify-content: flex-start; align-items: center;
background-color: #1F1F1F;
box-shadow: 1px 7px 5px -3px rgba(0, 0, 0, 0.35);
img { margin: 8px 8px 8px 24px; }
h1 { margin: 8px 24px 8px 0px; font-size: 20px; color: #fff; }
a {
margin: 8px 4px 8px 4px; padding: 12px 18px 12px 18px;
border-radius: 4px;
font-size: 16px;
color: #fff; text-decoration: none;
&:hover { background-color: #2D2D2D; }
&:active { background-color: #363636; }
}
}
section {
max-width: 1280px;
margin: 6px auto 6px auto;
color: #fff;
h2 { font-size: 36px; margin: 32px 0px 0px 0px; }
}
table {
width: 100%;
text-align: left;
overflow-x: scroll;
img { display: inline-block; vertical-align: middle; width: 32px;
&#h { width: 18px; }
}
th { background-color: #242424; font-weight: bold; padding: 12px;
}
td { background-color: #1D1D1D; padding: 12px; }
}
ul li { list-style-type: square;
img { display: inline-block; vertical-align: middle; width: 32px; }
}
#madebythundiverter {
width: 100%;
margin-top: 32px;
padding: 12px 0px 12px 0px;
background-color: #1F4E79;
color: #fff; font-size: 90%;
text-align: center;
a { color: #fff; text-decoration: none;
&:hover { text-decoration: underline; }
}
}
/* SCROLLBAR */
::-webkit-scrollbar {
width: 16px;
}
::-webkit-scrollbar-track {
background: none;
}
::-webkit-scrollbar-thumb {
background: #212121;
}
::-webkit-scrollbar-thumb:hover {
background: #242424;
}
::-webkit-scrollbar-thumb:active {
background: #2C2C2C;
}

85
misc/robots.txt Normal file
View file

@ -0,0 +1,85 @@
# If ur reading this...
# U like Balls
# We're no strangers to love
# You know the rules and so do I (do I)
# A full commitment's what I'm thinking of
# You wouldn't get this from any other guy
# I just wanna tell you how I'm feeling
# Gotta make you understand
# Never gonna give you up
# Never gonna let you down
# Never gonna run around and desert you
# Never gonna make you cry
# Never gonna say goodbye
# Never gonna tell a lie and hurt you
# We've known each other for so long
# Your heart's been aching, but you're too shy to say it (say it)
# Inside, we both know what's been going on (going on)
# We know the game and we're gonna play it
# And if you ask me how I'm feeling
# Don't tell me you're too blind to see
# Never gonna give you up
# Never gonna let you down
# Never gonna run around and desert you
# Never gonna make you cry
# Never gonna say goodbye
# Never gonna tell a lie and hurt you
# Never gonna give you up
# Never gonna let you down
# Never gonna run around and desert you
# Never gonna make you cry
# Never gonna say goodbye
# Never gonna tell a lie and hurt you
# (Ooh, give you up)
# (Ooh, give you up)
# (Ooh) Never gonna give, never gonna give (give you up)
# (Ooh) Never gonna give, never gonna give (give you up)
# We've known each other for so long
# Your heart's been aching, but you're too shy to say it (to say it)
# Inside, we both know what's been going on (going on)
# We know the game and we're gonna play it
# I just wanna tell you how I'm feeling
# Gotta make you understand
# Never gonna give you up
# Never gonna let you down
# Never gonna run around and desert you
# Never gonna make you cry
# Never gonna say goodbye
# Never gonna tell a lie and hurt you
# Never gonna give you up
# Never gonna let you down
# Never gonna run around and desert you
# Never gonna make you cry
# Never gonna say goodbye
# Never gonna tell a lie and hurt you
# Never gonna give you up
# Never gonna let you down
# Never gonna run around and desert you
# Never gonna make you cry
# Never gonna say goodbye
# Never gonna tell a lie and hurt you
# GET RICKROLLED!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#11

View file

@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>N0VA CLIENT</title>
<link rel="shortcut icon" href="assets/mc-logo.png" type="image/x-icon">
<link rel="shortcut icon" href="assets/icon.png" type="image/x-icon">
<link rel="stylesheet" href="home.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet">
@ -17,8 +17,8 @@
<li><a href="worlds.html">Worlds</a></li>
<li><a href="packs.html">Resource Packs</a></li>
<li><a href="servers.html">Servers</a></li>
<li><a href="mc quick guide/index.html" target="_blank">Quick Guide</a></li>
<li style="float: right;"><a href="https://github.com/cobblesteve01/Eaglercraft-Extras" target="_blank"><img src="assets/github.png" style="height: 25px; color: white;" alt=""></a></li>
<li><a href="quickguide/index.html" target="_blank">Quick Guide</a></li>
</ul>
<br><br><br>
@ -27,13 +27,13 @@
<br>
<p align="center" style="font-size: 20px; font-family: inter-medium;">Before you go, we want to tell you that this client's voicechat<br>feature is <b>not</b> completely safe and could leak<br>your IP address. Proceed with caution!</p>
<p align="center" style="font-size: 20px; font-family: mc;">Before you go, we want to tell you that this client's voicechat<br>feature is <b>not</b> completely safe and could leak<br>your IP address. Proceed with caution!</p>
<br><br>
<div class="container">
<a href="clients.html">
<button class="button" style="background-color: dodgerblue; border-width: 0; margin: 5px;">Back to Safety</button>
<button class="button" style="background-color: #008000; border-width: 0; margin: 5px;">Back to Safety</button>
</a>
<a href="clients/1.5/N0VA CLIENT.html">

88
mobile.html Normal file
View file

@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mobile Clients</title>
<link rel="shortcut icon" href="assets/icon.png" type="image/x-icon" />
<link rel="stylesheet" href="home.css" />
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons+Round"
rel="stylesheet"
/>
</head>
<!-- Google tag (gtag.js) -->
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-B23XL7G2NK"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-B23XL7G2NK");
</script>
<body>
<ul>
<li><a style="margin-left: 5px" href="index.html">Home</a></li>
<li><a class="active" href="clients.html">Clients</a></li>
<li><a href="worlds.html">Worlds</a></li>
<li><a href="packs.html">Resource Packs</a></li>
<li><a href="servers.html">Servers</a></li>
<li><a href="skins.html">Skins</a></li>
<li>
<a href="quickguide/index.html" target="_blank">Quick Guide</a>
</li>
</ul>
<h1
align="center"
style="font-size: 54px; margin-bottom: -10px; text-decoration: none"
>
Mobile Clients
</h1>
<p align="center" style="">There is only one 💀</p>
<br /><br /><br />
<div class="container">
<button
class="button"
style="
height: 200px;
margin: 15px;
cursor: unset;
font-family: mc;
"
>
EaglercraftX
<p
style="
font-size: 14px;
padding-bottom: 15px;
font-family: mc;
"
>
Author: Irv77
</p>
<a
class="play-hover"
style="
text-decoration: none;
color: white;
border-radius: 0px;
background-color: #008000;
padding: 10px;
padding-right: 40px;
padding-left: 40px;
font-family: mc;
"
href="mobile/index.html"
><span class="material-icons-round">play_circle</span>&nbsp;Play</a
></button
><br />
</div>
</body>
</html>

BIN
mobile/assets.epk Normal file

Binary file not shown.

44842
mobile/classes.js Normal file

File diff suppressed because it is too large Load diff

1
mobile/classes.js.map Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,620 @@
function isMobile() {
try {
document.createEvent("TouchEvent");
return true;
} catch (e) {
return false;
}
}
if(!isMobile()) {
alert("WARNING: This script was created for mobile, and may break functionality in non-mobile browsers!");
}
window.keyboardEnabled = false;
window.crouchLock = false;
window.sprintLock = false;
window.keyboardFix = false; // temporarily set to true until I can figure out whats going wrong with the event listener in charge of switching it
// Used for changing touchmove events to mousemove events
var previousTouchX = null;
var previousTouchY = null;
var startTouchX = null;
// better charCodeAt function
String.prototype.toKeyCode = function() {
const keyCodeList = {"0": 48, "1": 49, "2": 50, "3": 51, "4": 52, "5": 53, "6": 54, "7": 55, "8": 56, "9": 57, "backspace": 8, "tab": 9, "enter": 13, "shift": 16, "ctrl": 17, "alt": 18, "pause_break": 19, "caps_lock": 20, "escape": 27, " ": 32, "page_up": 33, "page_down": 34, "end": 35, "home": 36, "left_arrow": 37, "up_arrow": 38, "right_arrow": 39, "down_arrow": 40, "insert": 45, "delete": 46, "a": 65, "b": 66, "c": 67, "d": 68, "e": 69, "f": 70, "g": 71, "h": 72, "i": 73, "j": 74, "k": 75, "l": 76, "m": 77, "n": 78, "o": 79, "p": 80, "q": 81, "r": 82, "s": 83, "t": 84, "u": 85, "v": 86, "w": 87, "x": 88, "y": 89, "z": 90, "left_window_key": 91, "right_window_key": 92, "select_key": 93, "numpad_0": 96, "numpad_1": 97, "numpad_2": 98, "numpad_3": 99, "numpad_4": 100, "numpad_5": 101, "numpad_6": 102, "numpad_7": 103, "numpad_8": 104, "numpad_9": 105, "*": 106, "+": 107, "-": 109, ".": 110, "/": 111, "f1": 112, "f2": 113, "f3": 114, "f4": 115, "f5": 116, "f6": 117, "f7": 118, "f8": 119, "f9": 120, "f10": 121, "f11": 122, "f12": 123, "num_lock": 144, "scroll_lock": 145, ";": 186, "=": 187, ",": 188, "-": 189, ".": 190, "/": 191, "`": 192, "[": 219, "\\": 220, "]": 221, "\"": 222};
return keyCodeList[this];
}
// Ignores keydown events that don't have the isValid parameter set to true
const _addEventListener = EventTarget.prototype.addEventListener;
Object.defineProperty(EventTarget.prototype, "addEventListener", {
value: function (type, fn, ...rest) {
if(type == 'keydown') {
_addEventListener.call(this, type, function(...args) {
if(!args[0].isValid && window.keyboardFix) {
return;
}
return fn.apply(this, args);
}, ...rest);
} else {
_addEventListener.call(this, type, fn, ...rest);
}
}
});
// Allows typing in #hiddenInput
const _preventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
if(document.activeElement.id != "hiddenInput") {
this._preventDefault = _preventDefault;
this._preventDefault();
}
}
// Key and mouse events
// Note: the client must have the key, keyCode, and which parameters defined or it will crash
// Note: for text inputs, the client only reads from the "key" paramater
// * an exception to this appears to be the shift and backspace key
// Note: for inGame inputs, the client only reads from the "keyCode character"
function keyEvent(name, state) {
const charCode = name.toKeyCode();
let evt = new KeyboardEvent(state, {
key: name,
keyCode: charCode,
which: charCode
});
evt.isValid = true; // Disables fix for bad keyboard input
window.dispatchEvent(evt);
}
function mouseEvent(number, state, canvas) {
canvas.dispatchEvent(new PointerEvent(state, {"button": number}))
}
function wheelEvent(canvas, delta) {
canvas.dispatchEvent(new WheelEvent("wheel", {
"wheelDeltaY": delta
}));
}
function setButtonVisibility(pointerLocked) {
let inGameStyle = document.getElementById('inGameStyle');
let inMenuStyle = document.getElementById('inMenuStyle');
inGameStyle.disabled = pointerLocked;
inMenuStyle.disabled = !pointerLocked;
}
// POINTERLOCK
// When requestpointerlock is called, this dispatches an event, saves the requested element to window.fakelock, and unhides the touch controls
window.fakelock = null;
Object.defineProperty(Element.prototype, "requestPointerLock", {
value: function() {
window.fakelock = this
document.dispatchEvent(new Event('pointerlockchange'));
setButtonVisibility(true);
return true
}
});
// Makes pointerLockElement return window.fakelock
Object.defineProperty(Document.prototype, "pointerLockElement", {
get: function() {
return window.fakelock;
}
});
// When exitPointerLock is called, this dispatches an event, clears the
Object.defineProperty(Document.prototype, "exitPointerLock", {
value: function() {
window.fakelock = null
document.dispatchEvent(new Event('pointerlockchange'));
setButtonVisibility(false);
return true
}
});
// FULLSCREEN
window.fakefull = null;
// Stops the client from crashing when fullscreen is requested
Object.defineProperty(Element.prototype, "requestFullscreen", {
value: function() {
window.fakefull = this
document.dispatchEvent(new Event('fullscreenchange'));
return true
}
});
Object.defineProperty(document, "fullscreenElement", {
get: function() {
return window.fakefull;
}
});
Object.defineProperty(Document.prototype, "exitFullscreen", {
value: function() {
window.fakefull = null
document.dispatchEvent(new Event('fullscreenchange'));
return true
}
});
// FILE UPLOADING
// Safari doesn't recognize the element.click() used to display the file uploader as an action performed by the user, so it ignores it.
// This hijacks the element.createElement() function to add the file upload to the DOM, so the user can manually press the button again.
const _createElement = document.createElement;
document.createElement = function(type, ignore) {
this._createElement = _createElement;
var element = this._createElement(type);
if(type == "input" && !ignore) {
document.querySelectorAll('#fileUpload').forEach(e => e.parentNode.removeChild(e));
element.id = "fileUpload";
element.addEventListener('change', function(e) {
element.hidden = true;
element.style.display = "none";
}, {passive: false, once: true});
window.addEventListener('focus', function(e) {
setTimeout(() => {
element.hidden = true;
element.style.display = "none";
}, 300)
}, { once: true })
document.body.appendChild(element);
}
return element;
}
// Lazy way to hide touch controls through CSS.
let inGameStyle = document.createElement("style");
inGameStyle.id = "inGameStyle";
inGameStyle.textContent = `
.inGame {
display: none;
}`;
document.documentElement.appendChild(inGameStyle);
let inMenuStyle = document.createElement("style");
inMenuStyle.id = "inMenuStyle";
inMenuStyle.textContent = `
.inMenu {
display: none;
}`;
document.documentElement.appendChild(inMenuStyle);
// The canvas is created by the client after it finishes unzipping and loading. When the canvas is created, this applies any necessary event listeners
function waitForElm(selector) {
return new Promise(resolve => {
if (document.querySelector(selector)) {
return resolve(document.querySelector(selector));
}
const observer = new MutationObserver(mutations => {
if (document.querySelector(selector)) {
observer.disconnect();
resolve(document.querySelector(selector));
}
});
observer.observe(document.documentElement, {
childList: true,
subtree: true
});
});
}
function createTouchButton(buttonClass, buttonDisplay, elementName) {
var touchButton = document.createElement(elementName ?? 'button', true);
touchButton.classList.add(buttonClass);
touchButton.classList.add(buttonDisplay);
touchButton.classList.add("mobileControl");
touchButton.addEventListener("touchmove", function(e){e.preventDefault()}, false);
return touchButton;
}
function toggleKeyboard() {
const keyboardInput = document.getElementById('hiddenInput');
if (window.keyboardEnabled) {
window.keyboardEnabled = false;
keyboardInput.blur();
} else {
window.keyboardEnabled = true;
keyboardInput.select();
}
}
waitForElm('canvas').then(() => {insertCanvasElements()});
function insertCanvasElements() {
// Translates touchmove events to mousemove events when inGame, and touchmove events to wheele events when inMenu
var canvas = document.querySelector('canvas');
canvas.addEventListener("touchmove", function(e) {
e.preventDefault();
const touch = e.targetTouches[0]; // We can get away with this because every other touch event will be on different elements
if (!previousTouchX) {
previousTouchX = touch.pageX;
previousTouchY = touch.pageY;
}
e.movementX = touch.pageX - previousTouchX;
e.movementY = touch.pageY - previousTouchY;
var evt = window.fakelock ? new MouseEvent("mousemove", {movementX: e.movementX, movementY: e.movementY}) : new WheelEvent("wheel", {"wheelDeltaY": e.movementY});
canvas.dispatchEvent(evt);
previousTouchX = touch.pageX;
previousTouchY = touch.pageY;
}, false);
canvas.addEventListener("touchend", function(e) {
previousTouchX = null;
previousTouchY = null;
}, false)
//Updates button visibility on load
setButtonVisibility(window.fakelock != null);
// Adds all of the touch screen controls
// Theres probably a better way to do this but this works for now
let strafeRightButton = createTouchButton("strafeRightButton", "inGame", "div");
strafeRightButton.classList.add("strafeSize");
strafeRightButton.style.cssText = "left:24vh;bottom:22vh;"
document.body.appendChild(strafeRightButton);
let strafeLeftButton = createTouchButton("strafeLeftButton", "inGame", "div");
strafeLeftButton.classList.add("strafeSize");
strafeLeftButton.style.cssText = "left:5.5vh;bottom:22vh;"
document.body.appendChild(strafeLeftButton);
let forwardButton = createTouchButton("forwardButton", "inGame", "div");
forwardButton.style.cssText = "left:14vh;bottom:22vh;"
forwardButton.addEventListener("touchstart", function(e){
keyEvent("w", "keydown");
strafeRightButton.classList.remove("hide");
strafeLeftButton.classList.remove("hide");
forwardButton.classList.add("active");
}, false);
forwardButton.addEventListener("touchmove", function(e) {
e.preventDefault();
const touch = e.targetTouches[0]; // We can get away with this because every other touch event will be on different elements
if (!startTouchX) {
startTouchX = touch.pageX;
}
let movementX = touch.pageX - startTouchX;
if((movementX * 10) > window.innerHeight) {
strafeRightButton.classList.add("active");
strafeLeftButton.classList.remove("active");
keyEvent("d", "keydown");
keyEvent("a", "keyup");
} else if ((movementX * 10) < (0 - window.innerHeight)) {
strafeLeftButton.classList.add("active");
strafeRightButton.classList.remove("active");
keyEvent("a", "keydown");
keyEvent("d", "keyup");
} else {
strafeRightButton.classList.remove("active");
strafeLeftButton.classList.remove("active");
}
}, false);
forwardButton.addEventListener("touchend", function(e) {
keyEvent("w", "keyup");
keyEvent("d", "keyup");
keyEvent("a", "keyup");
strafeRightButton.classList.remove("active");
strafeLeftButton.classList.remove("active");
strafeRightButton.classList.add("hide");
strafeLeftButton.classList.add("hide");
forwardButton.classList.remove("active");
startTouchX = null;
}, false);
strafeRightButton.classList.add("hide");
strafeLeftButton.classList.add("hide");
document.body.appendChild(forwardButton);
let rightButton = createTouchButton("rightButton", "inGame");
rightButton.style.cssText = "left:24vh;bottom:12vh;"
rightButton.addEventListener("touchstart", function(e){keyEvent("d", "keydown")}, false);
rightButton.addEventListener("touchend", function(e){keyEvent("d", "keyup")}, false);
document.body.appendChild(rightButton);
let leftButton = createTouchButton("leftButton", "inGame");
leftButton.style.cssText = "left: 4vh; bottom:12vh;"
leftButton.addEventListener("touchstart", function(e){keyEvent("a", "keydown")}, false);
leftButton.addEventListener("touchend", function(e){keyEvent("a", "keyup")}, false);
document.body.appendChild(leftButton);
let backButton = createTouchButton("backButton", "inGame");
backButton.style.cssText = "left:14vh;bottom:2vh;"
backButton.addEventListener("touchstart", function(e){keyEvent("s", "keydown")}, false);
backButton.addEventListener("touchend", function(e){keyEvent("s", "keyup")}, false);
document.body.appendChild(backButton);
let jumpButton = createTouchButton("jumpButton", "inGame");
jumpButton.style.cssText = "right:20vh;bottom:20vh;"
jumpButton.addEventListener("touchstart", function(e){keyEvent(" ", "keydown")}, false);
jumpButton.addEventListener("touchend", function(e){keyEvent(" ", "keyup")}, false);
document.body.appendChild(jumpButton);
let crouchButton = createTouchButton("crouchButton", "inGame");
crouchButton.style.cssText = "left:14vh;bottom:12vh;"
crouchButton.addEventListener("touchstart", function(e){
keyEvent("shift", "keydown")
window.crouchLock = window.crouchLock ? null : false
crouchTimer = setTimeout(function(e) {
window.crouchLock = (window.crouchLock != null);
crouchButton.classList.toggle('active');
}, 1000);
}, false);
crouchButton.addEventListener("touchend", function(e) {
if(!window.crouchLock) {
keyEvent("shift", "keyup")
crouchButton.classList.remove('active');
window.crouchLock = false
}
clearTimeout(crouchTimer);
}, false);
document.body.appendChild(crouchButton);
let inventoryButton = createTouchButton("inventoryButton", "inGame");
inventoryButton.classList.add("smallMobileControl");
inventoryButton.style.cssText = "right:19.5vh;bottom:0vh;"
inventoryButton.addEventListener("touchstart", function(e){keyEvent("e", "keydown")}, false);
inventoryButton.addEventListener("touchend", function(e){keyEvent("e", "keyup")}, false);
document.body.appendChild(inventoryButton);
let exitButton = createTouchButton("exitButton", "inMenu");
exitButton.classList.add("smallMobileControl");
exitButton.style.cssText = "top: 0.5vh; margin: auto; left: 1vh; right:8vh;"
exitButton.addEventListener("touchstart", function(e){keyEvent("`", "keydown")}, false);
exitButton.addEventListener("touchend", function(e){keyEvent("`", "keyup")}, false);
document.body.appendChild(exitButton);
// input for keyboard button
let hiddenInput = document.createElement('input', true);
hiddenInput.id = "hiddenInput"
hiddenInput.classList.add("inMenu")
// We are hiding the text input behind button because opacity was causing problems.
hiddenInput.style.cssText = "position:absolute;top: 0vh; margin: auto; left: 8vh; right:0vh;font-size:20px;z-index:-10;color: transparent;text-shadow: 0 0 0 black;";
hiddenInput.value = " " //Allows delete to be detected before input is changed
hiddenInput.addEventListener("input", function(e) {
let inputData = e.data ?? "delete"; // backspace makes null
window.lastKey = inputData
hiddenInput.value = " "; // We need a character to detect deleting
if(window.keyboardFix) {
if(e.inputType == 'insertText') {
let isShift = (inputData.toLowerCase() != inputData);
if(isShift) {
keyEvent("shift", "keydown")
keyEvent(inputData, "keydown");
keyEvent(inputData, "keyup");
keyEvent("shift", "keyup")
} else {
keyEvent(inputData, "keydown");
keyEvent(inputData, "keyup");
}
} else if (e.inputType == 'deleteContentForward' || e.inputType == 'deleteContentBackward') {
keyEvent("backspace", "keydown")
keyEvent("backspace", "keyup")
}
}
}, false);
hiddenInput.addEventListener("keydown", function(e) {
if(!(e.key && e.keyCode && e.which) && !window.keyboardFix) {
console.warn("Switching from keydown to input events due to invalid KeyboardEvent. Some functionality will be lost.")
window.keyboardFix = true;
if(window.lastKey) {
keyEvent(window.lastKey, "keydown")
keyEvent(window.lastKey, "keyup")
}
}
}, false);
document.body.appendChild(hiddenInput);
let keyboardButton = createTouchButton("keyboardButton", "inMenu");
keyboardButton.classList.add("smallMobileControl");
keyboardButton.style.cssText = "top: 0.5vh; margin: auto; left: 6vh; right:0vh;"
keyboardButton.addEventListener("touchstart", function(e){e.preventDefault();hiddenInput.blur()}, false);
keyboardButton.addEventListener("touchend", function(e){e.preventDefault();toggleKeyboard()}, false);
document.body.appendChild(keyboardButton);
let placeButton = createTouchButton("placeButton", "inGame");
placeButton.style.cssText = "right:6vh;bottom:37vh;"
placeButton.addEventListener("touchstart", function(e){mouseEvent(2, "mousedown", canvas)}, false);
placeButton.addEventListener("touchend", function(e){mouseEvent(2, "mouseup", canvas)}, false);
document.body.appendChild(placeButton);
let breakButton = createTouchButton("breakButton", "inGame");
breakButton.style.cssText = "right:19vh;bottom:41vh;"
breakButton.addEventListener("touchstart", function(e){mouseEvent(0, "mousedown", canvas)}, false);
breakButton.addEventListener("touchend", function(e){mouseEvent(0, "mouseup", canvas)}, false);
document.body.appendChild(breakButton);
let selectButton = createTouchButton("selectButton", "inGame");
selectButton.style.cssText = "right:6vh;bottom:49vh;"
selectButton.addEventListener("touchstart", function(e){mouseEvent(1, "mousedown", canvas)}, false);
selectButton.addEventListener("touchend", function(e){mouseEvent(1, "mouseup", canvas)}, false);
document.body.appendChild(selectButton);
let scrollUpButton = createTouchButton("scrollUpButton", "inGame");
scrollUpButton.classList.add("smallMobileControl");
scrollUpButton.style.cssText = "right:6.6vh;bottom:0vh;"
scrollUpButton.addEventListener("touchstart", function(e){wheelEvent(canvas, -10)}, false);
document.body.appendChild(scrollUpButton);
let scrollDownButton = createTouchButton("scrollDownButton", "inGame");
scrollDownButton.classList.add("smallMobileControl");
scrollDownButton.style.cssText = "right:25.8vh;bottom:0vh;"
scrollDownButton.addEventListener("touchstart", function(e){wheelEvent(canvas, 10)}, false);
document.body.appendChild(scrollDownButton);
let throwButton = createTouchButton("throwButton", "inGame");
throwButton.classList.add("smallMobileControl");
throwButton.style.cssText = "right:13vh;bottom:0vh;"
throwButton.addEventListener("touchstart", function(e){keyEvent("q", "keydown")}, false);
throwButton.addEventListener("touchend", function(e){keyEvent("q", "keyup")}, false);
document.body.appendChild(throwButton);
let sprintButton = createTouchButton("sprintButton", "inGame");
sprintButton.style.cssText = "right:19vh;bottom:53vh;"
sprintButton.addEventListener("touchstart", function(e) {
keyEvent("r", "keydown");
window.sprintLock = window.sprintLock ? null : false
sprintTimer = setTimeout(function(e) {
window.sprintLock = (window.sprintLock != null);
sprintButton.classList.toggle('active');
}, 1000);
}, false);
sprintButton.addEventListener("touchend", function(e) {
if(!window.sprintLock) {
keyEvent("r", "keyup");
sprintButton.classList.remove('active');
window.sprintLock = false
}
clearTimeout(sprintTimer);
}, false);
document.body.appendChild(sprintButton);
let pauseButton = createTouchButton("pauseButton", "inGame");
pauseButton.classList.add("smallMobileControl");
pauseButton.style.cssText = "top: 0.5vh; margin: auto; left: 0vh; right: 0vh;"
pauseButton.addEventListener("touchstart", function(e){keyEvent("`", "keydown")}, false);
pauseButton.addEventListener("touchend", function(e){keyEvent("`", "keyup")}, false);
document.body.appendChild(pauseButton);
let chatButton = createTouchButton("chatButton", "inGame");
chatButton.classList.add("smallMobileControl");
chatButton.style.cssText = "top: 0.5vh; margin: auto; left: 0vh; right: 14vh;"
chatButton.addEventListener("touchstart", function(e){keyEvent("t", "keydown")}, false);
document.body.appendChild(chatButton);
let perspectiveButton = createTouchButton("perspectiveButton", "inGame");
perspectiveButton.classList.add("smallMobileControl");
perspectiveButton.style.cssText = "top: 0.5vh; margin: auto; left: 0vh; right: 28vh;"
perspectiveButton.addEventListener("touchstart", function(e) {
keyEvent("f", "keydown");
keyEvent("5", "keydown");
}, false);
perspectiveButton.addEventListener("touchend", function(e) {
keyEvent("f", "keyup");
keyEvent("5", "keyup");
}, false);
document.body.appendChild(perspectiveButton);
let screenshotButton = createTouchButton("screenshotButton", "inGame");
screenshotButton.classList.add("smallMobileControl");
screenshotButton.style.cssText = "top: 0.5vh; margin: auto; left: 28vh; right: 0vh;"
screenshotButton.addEventListener("touchstart", function(e) {
keyEvent("f", "keydown");
keyEvent("2", "keydown");
}, false);
screenshotButton.addEventListener("touchend", function(e) {
keyEvent("f", "keyup");
keyEvent("2", "keyup");
}, false);
document.body.appendChild(screenshotButton);
let coordinatesButton = createTouchButton("coordinatesButton", "inGame");
coordinatesButton.classList.add("smallMobileControl");
coordinatesButton.style.cssText = "top: 0.5vh; margin: auto; left: 14vh; right: 0vh;"
coordinatesButton.addEventListener("touchstart", function(e) {
keyEvent("f", "keydown");
keyEvent("3", "keydown");
}, false);
coordinatesButton.addEventListener("touchend", function(e) {
keyEvent("f", "keyup");
keyEvent("3", "keyup");
}, false);
document.body.appendChild(coordinatesButton);
}
// CSS for touch screen buttons, along with fixing iOS's issues with 100vh ignoring the naviagtion bar, and actually disabling zoom because safari ignores user-scalable=no :(
let customStyle = document.createElement("style");
customStyle.textContent = `
.mobileControl {
position: absolute;
width: 9vh;
height: 9vh;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
padding:0px;
background-color: transparent;
box-sizing: content-box;
image-rendering: pixelated;
background-size: cover;
outline:none;
box-shadow: none;
border: none;
margin: 1vh;
opacity: 0.5;
}
.mobileControl:active {
opacity: 0.75;
}
.strafeSize {
width: 7.5vh;
height: 7.5vh;
}
.smallMobileControl {
width: 6vh;
height: 6vh;
margin: 1vh 0vh;
}
html, body {
height: -webkit-fill-available !important;
touch-action: pan-x pan-y;
}
.hide {
display: none;
}
#fileUpload {
position: absolute;
left: 0;
right: 100vw;
top: 0;
bottom: 100vh;
width: 100vw;
height: 100vh;
background-color:rgba(255,255,255,0.5);
}
.strafeRightButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAARRJREFUOE+dk0EORTAQhkci2HAEF3ESJ7Rgyw2cwAEkVhI7QhDJe/n7Mk3R0rxu0M7/dWb841RV9SHDmufZdHTbdwCCoO97a5EaOAwDtW1LEtQ0zQnkui4dx/EKBwTLyfNclAZQFEU0juOjGDHLsshLANr3/QdCWUjRdqnZWoO6rqO6rk93pGkqvx9BV3EQBFK4ritZgbIsEyJVrKajA03TdO8RQCYIgAziPqE0LQh/rSxLLQyQJEkojmN6BeFWE+xaFmKNGXE/dDATSBqSfXQ1mwpTy4KQzXtyNoN0Y8EwiNXfzplbG1Ln9r+c/TY2p2ZjYLnWN6HuXPqoKAryPE/EYDMMQzHRWNu2Sa3v++KdYzkezy+eN1EbyruiHgAAAABJRU5ErkJgggAA");
}
.strafeLeftButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAUFJREFUOE+dlDGqhDAQhrMgKhYWHsCLeARP4Lk8hIW9N7CxtbQQrAQLQVFUhPf485gwyWbZfZvGJM58zvz546Oqqh/BxrZtfPnx/EEgEzCO40eQaZpE3/dCggBp21ZLdBxH3Pf9BOP7mHddJ2NegoiA4CAIxL7vVjCqkaCyLKVGqOhVFbYeKRag67p0ECUURaHlJkki4jjW9sIwFMuySH0UCMJCNA7yfV+tj+NQcxP6LxAvhaBZlsntr0FIBoyD1nX904haIwGHYRB1XQveHlUFSJqmAhpRRU8g3gIEN0EEiaJIWQGtaaB5njWfmCCzEvqo5iO0RiBbezYI95E0ZJ7n0pD8+E0/cU2443GF1KlxEJns3W3lcVbQO4DtvRIbFdGv4BsQcuSpAdQ0jWLg3tA4z1NOPc+TT9d11TskY59ifgE9QD9CDm6XPgAAAABJRU5ErkJgggAA");
}
.forwardButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAcZJREFUSEulVEuqwkAQ7OAnoujalRfxCJ4gl/ESHsKFa72BJ3AhIiJk60IwKH6ZR43U0JlMiOH1xsx0T1ldU9PRarUy4sX1evW3aq+jxWJher2ePXg4HGoD+AdOp5PsdjuxwEhuNpsCaLPZlPf7bfcHg0Euf7lcROeZPB6P9tMBb7dbB8IiHEQQvKod1O/3+y/wbDYzw+HQMQaz2+1mwTQjMAwxRz1zBM6y7AuMA9CG7bKQDLFeLpd2OZlMXJ0vRRD4fD67ln0J5vO5ZU9ZkiRxqmjwghRkrLWlrmmaynq9ljiOJYoiud/vMh6PZTQaBS8bGj+fz7wUqPTbA9tGoyGtVssCvV4v+Xw+ollrQqXAmgbZdjodt22MkcfjUcoaditcni+Fz5ZO8VnrLp2PtSu0FJotWEJfBL4RYE2H+MA5xijUNtNsAQZd6YwyrStdEdKWbMkca+0QPqzcy/PtRrZgSZuFnrPW+mfgqrmg87CeBg76uA5gqBauKABzVmAIMbrdbm7IcB/W0wOIjvrpgdQdmwAPMtZ28tsEc90JH4vugMDOxxiZfDH/1RjnLfB0OjUhUCT7/X7wf5CDDRHtdtv+4sK4Rv4PfpOwZeVjdiYAAAAASUVORK5CYIIA");
}
.rightButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAVhJREFUSEudlT2qhTAQhSOICKK1lRtxCS7PRVjYuwaxtbKyFewURUS4j5PHyNy8/OibKpiZb04mmdFrmuYjDLZtm2nL+d1TwSpsmiYJSdNU0NpGnedZjOMovLquP1EUibZtnSqeOAAKk2As+r53xvm+L67r0volSSKWZZFqX4MRoMIJSN+d4KqqZOY8z0WWZV8qbcoBXtf1txS4FBSdBwAchqE4jsOYQFcTgM/z/AZzRwLTN1sCLug1+EkC+AzDIIIg+KuYLkNVrB6bTlAUhUAMmbbGtlJgD08Nx+aGBBz+L7Dusozgsixlg+BV6BTrVMLPWQoX2FRb/r5R433fZanuy3sKtj03Dr47zwV2NYjahY/Appa2Tau7QbhiOhIFmibZazACqEF0k4yAfKKpIrSKbUqe7t0NglLQ7+RpsMtPjk2Au66Tow7DgxscyOI4lkv4wbgv9yP/HwHyemKMQPbVAAAAAElFTkSuQmCC");
}
.leftButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAUdJREFUSEutlTuqhUAMQEcQEUFrt+a6XIa17sDG1sJSsBLsFEVFuJcEMoxhPm8uL5WOycl3YtA0zUcYZN930yfneaCCVdA8z05jncKyLGIcRxFUVYUR933/E4gbAfS+bzs4DEPxPM/LVncGClmWiXVdMVorGAAgHOxKC8AgP5VimibRti0CiqJ4+ZLgsiw/eZ6LYRic0anAOI7FeZ5a8LZtIgAwuIRumoQDSc8ExlLYwCYgB1Pj4PxVCh4xdLeua7SHlE3iFTFBCQhTQRPCHXjVmINt4+UFBpCrFJSFN5ii/Gvz1KyszePp/8u4qaPjckClAJvjOPCCeUVsc6C70riEdBcExitJEmyiLQPdxMjtxsGUFhnptptpddLNM0bsWo3qd+7kFTH9TnyANl253bquk3qQRhRF+A7PXK7rkkdpmqIO6QOQ5AuINXqeGbRlFgAAAABJRU5ErkJgggAA");
}
.backButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAXtJREFUSEuVlT3KhEAMhiMsKgt6BC/iETyB59pDWFjrDWxsLSwFK8FCUFZ2RdiPCBky+ca/wBbjxGfeeROzVp7nPxDxfr/lo9trC8F7oK7rbgP7voemacBK03RTXFXVbYjpBYRiKHBd17Cuq8r1fR/meYbn8wnjOGqMx+OhcjGP7yN4WRazYp6MEAx+KK45nK81MHqJ3pyFhJ1aIcFJkpydoe3HcazWmscmsOu6l+CfzweM4NfrtXUFt6JtWyiKAo7g6Dn+wjCEIAiU56h4miawCDwMg1YgtIPACKAi8mtItbiniscV8+KcqUYoqeWHGcHSVK5a7km1JEoVz+QxQfZUm9ReBlOiSbXJWw7Wise7gn95UvWet3TLf11x9OVx1Sa1XMguGK8kBw8OmSzLNlFRFAGCKAh66vHecKEJxqGHs+KoK64MHQm/1G7yJf71yTHKi7cNelRMfyeXps7FpA1clqVKx+nP4/v9bkvP87Tn2KsUjuOAbdtqjXt/DvSA6WCSwboAAAAASUVORK5CYIIA");
}
.jumpButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAARlJREFUOE+dlD2KhVAMhSMIWrkx1+CqXISFtS7C1sLSVrAQFEVFmOFcyH25eXNVJpWS+OXkz6Cu6x8Stq6rfH39HEjQX5BhGG5h4zhS3/cUlGVpFLVt+yp7GIZ0XZeNBQTmgJIkoW3bjEMGywwcw36AzvN0QTrbPM9UVZXhpGlKgGgDaFmWD6jrOkcFQ+I4Nt/u++7AOOkXSPZIQ1AGPtQwJHBAmAy6D9MQXYqGOT2SoKIoiMvxjRGwLMtMKywoz3MzflakQVyWhGqQGb8G/ac0BzRNk52aD3bbbK2IS3gaP8fZqWmQXMq7hfzaI5+ip8PDliPRK0USBgVs+mjNiUAR/wqeVPj8FtQ0jY3BJcOO4/ByoyiyPo77BUACR9z5EdScAAAAAElFTkSuQmCC");
}
.crouchButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAASVJREFUOE+dlDsKhEAMhkcQtPJiVh7AU3kCKwsLKz2ErYWlrWAhKIqKsEsCmc08fLB/pSR++ZPM6FRV9RFMy7Lw19fPDgfZIH3f38KGYRBd1wknz3N01DTNq+qu64rzPGUuQEAKKAgCsa4rBngyr0A5FAfQcRwqSK82TZMoyxI5YRgKgOgC0DzPP1DbtooLgvi+j99u26bAqKgB4jPikCiK0EmapgYMCigg2AxMH6RDeCtFURgwZUYclGWZgHbAiU0Ei+MYRyFBSZLg+smRDoK2wCXJBsL166B/WlNA4zjKrdlgtvkow9YdUQtP66c8uTUdxA/l3YE0ztGVo6eLR0t45YjDwAFJv7R4RcAR/QqeXFzFJaiua5kDNxm07/sl1/M8GaO8L0fuVtxHFTIkAAAAAElFTkSuQmCC");
}
.crouchButton:active {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAStJREFUOE+dlLGKhEAMhiOICqKdYGthaetL2GhlNQ9nZWFh5YtZiIKwRwLJjXHc3bu/WZnJfPknyazXtu0LACAMQ/whHcch3/qD44IgkK26rsFDUJIkjwc/bRRFAVmW/YJw4Rv5vg/neUooQlDiCEFpmsK2bbRhB9sJOIb3nSCdbV1XWJaFOE3TUCKtG6gsy4sLhkRRRGf3fb/AOKnTEWezIV3XkZNhGG4wjBeQMYbaz8XWEPsq8zzfYI+gcRwBr4NOXGKYMYZKIaC+7184XOxIg/Ba6JLlAuV5Dp4G/edqBOLJtrvmgrnqgy6rqroPpF2TT+3n2EeQPZTvBpLjBKRr9M17wxhugoD0HOlnwmBcZ9nv8ALiv4J3brAzWnEcy5I3TRNN9l9lQ/DsD7Mvyc0ay6bsAAAAAElFTkSuQmCC");
}
.inventoryButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAedJREFUOE+tlM1OwkAQx6elTYiCkSMnvKAX38KLr+DRm69hfAIP3jwbE24ceA4+TDBpCMWEFGgMBCgBUlrzXzLLLsVYo3NpOjv72/987Bq1Wi2mf7AgCATFYOB0OiXTNCV6s9mQYRiUyWSkbzKZHDx6uVyS7/vU7Xa3wPl8Ts1mkxgSx7EAAQhfFEUaHH7ECEWGIb6u6+4UAliv16VCAMIwJMuyxAb8Q72qdl8q1MmUkW6j0dCAgADAZYAiVoON+OeD4O/1erpCABEAs237YK14nRcBRUlg/X6f1uv1toYodrvdFikiVQ7CBiiEArVhh05DyhLY6XRoNBpJIMAMTTtRCeBwOCQ057h8KRiB80a5XC61DzXUFAIYF8/o/u6W3t0Penh8ovJJNuErZU2yS+eJOMdxdk1Bygy8ub4iz/+k55dXCfzJd3F6JIZaU+h5Hi0WC/IiS5xUNEMqFAo0Ho81Xz6fp9lspvlQGplypVKJB4MBAci3I20j1DipUAWqQ4yZ+24ecfD+FCSAqKFq2MSDrN5bvi081BgxWAKIOVSvFwYcm9W7zI+BGsfXL1FDBvImfgiQGgNYKWfCzxti8NqgWQbXEO9ZGuMUkcF+UySw1WqJGvzFMIOr1WqrsFqtaiws/sYAYvsC6d7MZCUlFo0AAAAASUVORK5CYIIA");
}
.chatButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAh5JREFUOE99lN8vA0EQx2fjkYY3HvB/8V4kEg8SBJUGVVJU4rfeVRO01bpIT8VviYjEq2tF678g5ZGVmbm9Hy02l9zd7MxnZ747u+Lhsig7OrtBDQkS8BFCkAn/BQiQUrILmvHTfqOfeXEDAkE4397Z5TqQn/BBmMtwtQACTy5vQU8kQTxcFSmJSqncsKAT4AGohBQwrqcBpHQzUiDlUB/gpFL3QSAsX5WGIBUcHJn4K47sWmyONERN4toBfftA6ISQz9q7q4ONRM2UiM2BVtAW50izFT3N2t9fmKTRa7lMhr7REIF2tExDVv3BXtqAlkAbJGIRml9JZmhjxN1ZgXatalk0MTAehs/am73DvHOubrxrmNH2/DSDUjkW+7ZokGfFYo0GQ9PwUXuDhJb9Vaf+YA80B9pgPRIm/9W9QwZdF3LYflCxShQ4FI4QSPWRl6ZsWNrqTIgkW9vPc2nnRtbOiEHDs/P/gNBDUGnxqXHqz80Dg97iNLcvsWtfnrghv7+/YGxhmWA4cPX6sTQ5xtpJgK3DY8B4YWZSEvsANcJRD4mODjeAmiiSu2EnbzKokN6l81gpPVPARCzuBP4GoeKwGe1DnDwy+UwqULWMIHe7fSeepXFuBVUWmvWjAouNIDS8WJyRs6K6PjzXinOVeIr1ZJSSj6UqGHmDU8SC7R70/3NrqnnVqM51oy9FZXRDd7Oxa+C7y9/ZXKGnfI9WP7ZEKinpenUjAAAAAElFTkSuQmCC");
}
.pauseButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAjJJREFUOE9lVO1qE1EQnXkK+6P6FP7oI/gMraIoFIMr1WL9aNEfRWNtS1Li1ti6aYr5sEkXyRrRRC2IFNqCgptIE5/myszcO7tbLwuZPTv3zJmTOxcP+10zMXkB3DJggB5EZIjeERCMMZJCMIX2l/Ki3jdAIqLv5ybPJwmchxkS4RVyV4AIP/QPINiuAB5+6bKI0WD4X0HdkCJwghxhIWgAGJMockQu4ewGlXImYCJq37VGROn2RU3WlqQvwx7S98KbOscZIpc4ffOW7mm+3uRYMHFZMImLQUOiH72IPfo7HKqCmdxtNbRZ9jmeyXm8kZIdRnix0uQ/Br9/6nAH4zhWsy97c7YeQt3f4PiKd0dV1vwNjYvVlph90A2ZaBSLR7Suzt21McJuqUB5cE0xgN1SkTHKL73dE6KvnRZDo3igVa7P39NztFNYZ/zG/IK2y5j9Z17W2tLa5/CdVWSJEGB24YESba++YILZ+4TRQthaW9HD+6oeMil+bNUMndrT3/ZAIkLu4aJWLz/Pc5x7tKhE5ZU8m05Pee890H6MmlVD54A8cstbeqxm+8+WGfaWnujI+E+XtbWtdiREncYOz+No8EeEI0Lv+KcoMgYuTV3kuH/ySwsR5oa4sh9JAUc0HhKRnBNxIjXxAuit4NoiONjviNlERMBpLIqcKr0+UteKXiWaCZBSVDVHgzGE7VAkUsN2yLLvotV9zyinfcF63uQ3g0SN7UEmKWlV1abbp8G1F94/2dEyKXciad8AAAAASUVORK5CYIIA");
}
.exitButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAiBJREFUOE99U11rE1EQnfsvFKwg/QkK+iaIio+KJNAnbUQoRaGgf0NRTFPU3TTJBjfdTZpN/aJtUHwU8anJJlH/y8o5c+92k1bnJXvn48yZMxNzmETZ2aXzQjMikunn6YYgkuZtb/+LGAAZY+TMuaX/IfwzBpBWMxAzHMQZaEyPxkw+rWeRpCPteFWDWIdRRiITC+Qm1KgRybJ5cOtzFKtBxO5mOIiyLBOZjca5RqXVCvPiRl01QYKIlCsVFu1sw6/p1VbEhgSCa3I0IoHSfQVxFtsigBfJRNt1BXKjHfQ77DcbpQyUKw9yEBSiCSkXDP6O7zN/sx3raJ97IcWejVOOEO1/lX4cHoMVFuDg7pRWpHzrGnO2gq6O+SFqM06NrPWG3wi2eFZ43y6tyN3rV/PcN+GuAu2FDTL/lU7owI6MGLm3vk6NcWMa0O01a5vHQxoRrzPQmt22bxkpEOpWHz2eE9aBoSNg69VXtomIFw1Uo27zbc4IHw83NsjCCax6z7/R2Xv5gmD13nslsONvcSe/0ykDa0+f6N3YYggLS7qhOye+Xz97zt9G/yNZmtCrZSjC+mEH33/mWwPIzSuXyO5wwX/j8kWOHySflFHo16jRdKQawVAEQ7JOpqOd9Iu0yMiIeefV+F+bjSe5gAv3d0L4on5kZOxoP9I/kvSTvDM6uCPiai0j+ItvsnU+PJYvLOteYfZ89WqKiZrg/LkONucvWvgqB/7CAfgAAAAASUVORK5CYIIA");
}
.keyboardButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAfdJREFUOE+VVN1KG0EU/ubait7ZC9un6IXP4BvU9qJQJFhsEUGpPkAsWJL+xEjMxhRjEhMXyRqx2lYoRfCmF81uyca3UGKvp5xzZpJsFI3Lwjkz88035+ebUafHdf1w/DHsp6FBv1KKp2isoKC1FghNk2ss4byjH1BEROtj44+6AMapCInwCrk9gAj3j0/gbOSgTr/VOYjQ9yPAzo47nIRTBLTuRhT6waB7IzgmovRtakTEaRO7orR4cKefyG4zJkLUPcpWU6rRrc11P+kUBfHryOMatYIAz2Ze96VnOmXaZTtoi11aTyGZK3Fj1M/DGqPPGw08n53D0PAI/rUv2V61L/BgePTamPCEKaQ+IJmvSAlO6i4TtfwAL97MRyLiUI0UIm03c18+JvBpa0eIvtcqJD+EDR8v5xeQyZYQm5661RIpYXKJVXwuVCW1r26ZjyWi2OJbo2UR5E1RWDkSIrP6Dultl3uhDioFTapt/gnwamkZmWwZsemnbG/67BrZ9Eoc6zt7oP3KK+U16SBsBDg8+30vUU5OPEGm6glRrbjJ9zH0/0phSYzmgg7i53Y9uZP9RJ3bLe0SPd7iO7s1KTYREa5JEfXqb8AkeyLK6zO/BbfqSoiUsCGMjkVVdr1XY4xz3sd1fM3pnC9tN5vMm9QbnH2n+uv5HyQVKCmWNUnHAAAAAElFTkSuQmCC");
}
.placeButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAd5JREFUOE+tlMlqQkEQRfs5gAv10xwQEf1Fd4J+h8PChYi6EKeNOCvqC6fltv2ISQxJgQjd1afq1vCCVqsVmn+w/X5vKYGAm83GxGIxh77dbiYIAhOPx93Zer1+Gfp0OpnVamVGo9EDuNvtTLfbNYKEYWhBADm73+8ROOf42IyCwP6Px+NnhgDb7bbLEMD1ejWJRMI+kJxsNvtlccjOSUZup9OJAIGS5eFwMM1m0zpXKhUHJEN8KBNBJ5NJNEOAOGDJZNI9JBjAVCpl8vl8JEOglASbTqfmcrk8akix+/2+lYhUOfHgeDxaIHflcvlbyQ44HA7Ncrl0QB4L6mdYLBbfBy4WC+tMg3xLp9MOTq2oqW+ZTMZ2nBpGMgQITA3QI78Rr+5rtZoNOBgMnk1Bsg+kATK/EQLqnnqXSiXbacYmkuFsNrOpMyr86Di1ZAtoDIZ8bQ9Zabi5c5Lr9Xo4n88NQG2HXyM1hbNqtfpzU3ygdllDyzwK6I8NgTUFiuAkC6guy0Gyt9utG+xCoeB2V0NNIOwTkDnESctOwTUm2pRcLmfPfD+t36caCkg0/7Ol4vtfGKnwG8TXBjWBJPM9e8ckEQW+IdkBe72ercFfjBk8n8+PDBuNRoTF5W8MkOwDqQTfZInxo/8AAAAASUVORK5CYIIA");
}
.breakButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAeRJREFUOE+tlMmKAjEURVMO4EL9MZcKKn6iO0G/w2HhQkRdiNNCcVbUak7kplNlNU1DP6iFMXXq3vvyEnQ6ndD8Q51OJ0sJBNzv9yaVSjn08/k0QRCYdDrt1na7XeKnr9er2Ww2ZjKZvIHH49H0+30jSBiGFgSQtdfrFYGzfjgcHLxQKJjpdPqtEGC323UKATweD5PJZCyI36iXWty0220HrNfrVp2zzIZerxcBAgGgGFANnI8Dy+VyFoDdarVqZrNZVCFAIFQ2m03MSsoEwwVPuVw28/nc3O/3d4aEPRwOrUU2kBuFKhQmKZM67FJYdsDxeGzW67UFbrdbu6FYLDqVcWVxWCJwtVq5fNhQKpVMPp//yEw2a7Wa+yBOyDCi0AeSEWEDpQEo55GySqXiOk7jiGg0Gn03BcsAdb7URaBqgN9R5eufhI8MF4uFbcLlcokcC/nS8dD0oIr9Kme52WyGy+XSANR0xJsATN1MPE9+l33g+Xy2+5Ms+1Dl5sOdZQHJUeMUbwovak1KsYttNetHoF6kk+TlqwbMmGkM+a05/8jQV8jGRqNhHSl8ZpjibKr8BnHbcAMFssx9RjNU/qT4WckiBzyeoQMOBgN3/fzUxd/WmZLb7fZW2Gq1Ivv58y8FSPUFhmoAc4SumvkAAAAASUVORK5CYIIA");
}
.selectButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAcRJREFUOE+tlMuuAUEQhqsZCWJ4KAsLL0pG4pKQWHgHzMJK2LlFIm5BMCd/SbXumRGccyoRme7O13/VX9Wq0+kE9A9xOByYogS43W4pkUho9O12I6UUJZNJvbbZbGKvPp1OtFqtaDKZPID7/Z6GwyEJJAgCBgGItfv9bsGxjjOsSCn+n06nT4UA9vt98jxPKyiXy9Rutz/6xtn1ev0EIt3BYEC1Wo3S6TRvFItF6vV6dL1eyXEc/Y09rJVKJd5HuhEgFAIohf3Uo263y3ABXi6XRw1R7NFoRJVKhdXg9mw2y3WCUaiTaZhciMwkkLIGjsdjWi6XDETKSDefz78VWq/XrZQt4GKxoGq1qoG5XM5qIXFUlEI1ah6bMhQCiFpKZDIZqwexjvYBAC2FX7PZ1Apns9nTZQG+UhiXO+prmhipIW5AH0oNXddlg9AWpikyPWj4RqMRraHnecF8PicBisu/NsUEHo9Hq4apVCrWadQPCmNdFmDY5UKhwCYgzLmV2cXabreL9qEAw32IKUCYYxc3hubocR+GgYB88zDIebgMxRqI98wcpbdjEjpgAX3f58fxL4F0z+fzQ2Gr1bJY2PwmAJL4ASn3ymSCH/2UAAAAAElFTkSuQmCC");
}
.scrollUpButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAfhJREFUOE+tlL1OAkEUhe8sUAkklHQ2dj6Q0crEwsTCWFlZGJ/Aws7amNBR8Bz8mKBBwmJClp+YEGAJkIU1Z8gZdlnWaPQ27A53vnvO3TujSqWSL/8QrutqiiJwNBqJZVkGvVwuRSkliUTCrA2Hw52lZ7OZDAYDabVaa+BkMpFqtSqE+L6vQQBibbVaheBYR45WpJT+tW17oxDAcrlsFALgeZ4kk0m9Ae9QH1S7LRXqjGXYrVQqISAgAACEgox0Oq0foZCFULTdbocVAogERCqVCglAwb2DQ73mNl4kCEVLEJ1ORxaLxbqHaHa9XtcWYZVJUAGF+IIA3p6fysnVteQtT7LZbKgoLBtgs9mUfr8v4/E4doAIRMIuaATY6/XEz+9/O5FQ+Gp/6Jy7+wetNJPJ6H6ihyGFBGITg5u3qziDT730+PSsoehpo9HYfBRYJvD97TVW5c3lheyCoc8Ry47jyHQ6jYU5q6ScHR9FlHGDsVwoFPxutysA8nRsUzE2BNJm7FcOAnmWObScRwJRCD3L5XJmtFjcWCYQPQwG1HLQg+NEZSiKecXsIiJAzCGSeNgx4HgOnmVs5MXAPB6/SA8J5CZeBFDBQrxh6ITXG3Jw28CJomXcZz8JWoSDYMCyAdZqNd2DvwROyXw+XyssFoshFv78TQDE+AI1+8NkGpdDjwAAAABJRU5ErkJgggAA");
}
.scrollDownButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAfxJREFUOE+tlMtKY0EQhqtzAdEkuPUBxI0PJO4EF4ILn2AYfItZDLhzBrLLIrjxHXIRIoSQEyGcXBgIuSckOfJ1qPYcY4KD1uZ0OtVf/39XdZt8Ph/IN8RoNLIUo8B+vy+xWMyhl8ulGGMkHo+7uV6v9+HW0+lUut2u1Ov1NXA4HEqpVBKFBEFgQQCZW61WETjz5FhFxtiv53lvCgEWCgWnEMBisZBEImEX8Bv1YbXvpaLOWcZusViMAIEAGI/Hbm0qlXJjFOpGbNpoNKIKAZJAJJNJ+2Wjg+NTOx5VnyQMZA4oR0I0m02Zz+frM+SwK5WKtYhVklAG7PbqQn7+urPATCaztR+w7IC1Wk06nY4DDgYDB3v2XuTPw6MFbgs22gC2222bT4FUGTAC4K4wvmfPMKIQ4Ecwv/tvJ+z3/V85zuxJtVp9KwqWAVIt7PqrhPy4uRaFsWhXnBzub1r2fd9WjVZBKdDL8zPLAXgUW2xlUn1nOZvNBq1WSwDq7dCWUagCP1XlMFDvsjbtZDKxSgkUKpCNtf9UtquyArXKmsAiGp0z1Uin0+7ualPTu8QGkD4kSS87Dc44fJdZqA+D5un12zhDBeoifQiwphvpC6OK9Xkjh9cGN0Yt8559JtQiDsKBZQcsl8v2DL4S3JLZbLZWmMvlIiz+/J8ApPEKFYzOZJBKmFAAAAAASUVORK5CYIIA");
}
.throwButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAehJREFUOE+tlLtOAlEQhme5VAK9D2DnG1nZ2VpZG5/Aws7amNBR0PoAFnIxwYQQFhOyXEJCuEOANd/BOeyyG4PRaTZ7Lt/5/5k5xykWi778Q0ynU0NxFDgajSSRSFj0ZrMRx3EkmUzaseFwGHv0YrGQfr8vzWZzB5xMJlKpVEQhvu8bEEDGttttCM44a4wixzFf13X3CgGWSiWrEMB6vZZUKmU28I/6oNpDqaizlrFbLpdDQCAANA0oUjVs5F8PYrzVaoUVAmQBkU6nQwI4kMhkMqFxoKSEaLfbslqtdjkk2bVazVjEqi5iw3w+l5Ozc7NpWn+XXC4XWxgsW2Cj0ZBer2eBgIGiDNjt1aWBXFzfyGliHQuNALvdbuhkChWEfbifZv7u/sFAs9msXY8TchhSqEAmadI4mBIUSk4pHG7q9fq+KFgGSLXG4/GPsDgonRCx7HmezGazo2BAvf5AHp+ejX2UWsv5fN7vdDqCyqDNl9e32GoeDip0MBjschgEetvUUZDDRaiMAA+rTLK10YP3Vm+LNjUtRtgcqkL6MHi9aHA2B++yuavfD4OC9fpFcqhA3aQPAS2hB6lStazPG2t4begQm0Pes2NCLeIgGFi2wGq1anLwl6DCy+Vyp7BQKIRYTP4mAGl8AUQGwWSM9G4HAAAAAElFTkSuQmCC");
}
.sprintButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAd1JREFUOE+tlEmKAkEQRSMdwIV6MbeKeEKVciXoORwWLkTUhThtxAFnq/lh/zSzyoaW7gCxDCtf/JjStNvtUP7BDoeDUgyB2+1WEomERd/vdzHGSDKZtL7NZvM29Ol0kvV6LePx+Anc7/fS6/WEkDAMFQQgfI/Hw4PDj3dUkTH6PZlMXgoB7HQ6ViEAt9tNUqmUHsBvqHfVRqVCnU0Z6Xa7XQ8ICAAsAxRRDQ7iNwPBP51OfYUA4gXY8Xi0AvL5vD4jKC2bzeojoCgJbDabyeVyedYQxR4MBpoiUq3VavZwoVAQAOr1uudjIDqRsgWORiNZrVYeMJPJ6LvoYKVSkWq1Kq4PgVxoDLhcLq0CNKnVaikAivEpFovSaDRi0Fwup6mjhp5CAlls1JFQKi2VShIEgReIJRkOh6+mIGUA0a10Oi3X61V2u11MZblc1lq+Sz2W8nw+V+kYFTdlqvsJxo7blIMgCBeLhQDI7Yg24KOmuEAO8bsRQRBatMPw25QJjHaZh9lFlIGGceFQY3bfAjGH7nphVNAkd5d1V78vBq4h1y9WQwJ5iBcBVouBeMNQKa83vIPbBpNhmDLus98YU0QGrqGGFtjv97WofzFsyfl8fipsNpseC39+YgDRvgDSDetkcdqdJgAAAABJRU5ErkJgggAA");
}
.perspectiveButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAgxJREFUOE+VlM9L40AUx9+cF8Gbe1D/ld5F6FXv1h8gHirtaltXXGvU1o2g7ura1IJat61haaz4W7AieE6y2P4ZwrLnkfemM0lNl7JDIJnJy+d93zdvhj1d1/jH/kGQgwMHvBhjtIRzBgw45yIEl/Gxdcc46+oOGILwfV//gBdAcawNIrgCLhMg8Oz6Hoz9PLCnmxqJaDiuCvqfB90oAnDuKfKDIrEEsXJZrSuTQFi+LK3puKr0sVgC/v55hQ89vQpkZDW/NcoqPXdMfipQw3GUg5FYEkKhkILU63XIZVeCTgODTaMoEjxeWeRR0/U8Go+nCHRxbsHQcBgQ9H7sZ9K0tJk/oR/DHi6q9Neatq1iJ+cXQdd3wbJKChYOj8BEZJRisOS91SUBKpSF2fc1k0AN21V1T6eWCCRHNDoVULSTXqT4rcOSAN1Wy9h+QB61Gm3mczrg0daXVFsjyqzbRxVR2qX5s6XIUd0aXV4NKNIX5gNdjbDvxyats/PyEceufbFdlTG2kiEQliTv2WS8o6Ld0i/A75l1UuDYB+iRLO3T2lfliQStz812BP2oWAJULR7Qfmw4vwOGJjK6UqTFox27PH9qiT3ZDSS//hfIOK0KsxGEwS92UFHXjQYAPkUF/uw0wayYQiIW3Dp62ue0AdR7MfMdN8aGxrVvhkqOMsVx5gX5lclziiDMO/DeAFwyISmrQZieAAAAAElFTkSuQmCC");
}
.screenshotButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAcdJREFUOE+llE1LAkEYx585R3Ssg/WVvEbn3g7RoVBRRJFMS0vBsFLXhHzJlyXcjNJKiBA67264+zUiOk88M+64WxAsLgs7M/vMb/7Pf2YeMhr06JJnBayHAgV8CSFsCPsECFBKeQgOY3PyxTil/wIEQfh/0bM8DWBxxAHhXA63FkDg3WAIUrEMZPTUYyIMTRdBbhoZqQ5A6VTRTCBM30rN1HSR+rovJERJ6YTdkt8WQaZUY34KkKFpzIMNXwi+vz4FaG5+AUrphNNhGy4r1flCb32FeWTqOmz6w27sgWIqDtlyg20MeX3osl0zVRW2g1GHGotaKDXEAlsba6yNSi+TMchWWtzsYU9mIEPVYSccYyBrIk7CtqI0BcjrXQUcR1A+HoXcdZODnrstPH6AHu1G4n8U/QfKxcJwVm3z1B7lm4kiDfYOkq5AmUgQzmsyO6fkvlWleGrHqg6+w5Qrj9IhP1w0bwHnE6VRoXgO0KPA0amrXTsO7EOhrXBQt37F7qOhfbiCWMHljsLv5KwgqdPlZiMI6WN1ZkUV+q6ZILdlLhETnpQeZ59dAPGf92zlRjpJ0EReEv6gTF7OpkF286w6xSBkWvB+AJ1TDClYPe7/AAAAAElFTkSuQmCC");
}
.coordinatesButton {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAeZJREFUOE+VlF1LAkEUhs9cR3RZF9avqyiILgwtxRBJttJawT7NNaHS0pZwM/oOIoKud1fSvxHR9cQ544y7rmANgvNx5pn3vHtm2PtDk0+EpkA2DhzwxxijKRwzYMA5FyE4jd3uP8ZZ98/AEITr46HJXgDFMR9EcAVcHoDA64cXMI5KwN4fmySi7bgq6D8d3agAcN5TNAw0E4krfjGrqT6BMH2ZWsdxvan7rJiOxOHn+4s2j4yOAYKkVXrxjPxUoLbjBJ0EBqjEC8E+wrAhMGdUhIC3e4s86riDPZqNJnwgBEjYUSYNuVKVPgx7vW3QV+vY9kCP52JJBZIBhWIVwuF5OFxPQa5cE2a/NE0CtW23v0RgIZFSENwsG0J200mKz59cCNBTo4blB+SRp9AWk2kfBDfLlk8lVEHunNZFanfmeVeRoxbDa+sBiL4aC1Q1Sto/M2me3dROOVbtp+2SooiWCUCy8ehACMYfXFwB7mdWtcyxDtCj5Y3tAGRzZcmXcr+RhbolQI3KMd3HttOCeEYHXT8gK9ATLRoeeltKl5a4k/0gufMvEIw1LhvCbAThxKfdGnr6oACPojL/cDpg1k0hERPuPj3+MV0AtS5GnufG2NK4tmeow1CmeM56QV4l8p0iCOs9eL/YmiwplUjFQgAAAABJRU5ErkJgggAA");
}
`;
document.documentElement.appendChild(customStyle);

BIN
mobile/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

61
mobile/index.html Normal file
View file

@ -0,0 +1,61 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Play minecraft 1.8 in your browser" />
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
<title>EaglercraftX 1.8</title>
<meta property="og:locale" content="en-US" />
<meta property="og:type" content="website" />
<meta property="og:title" content="EaglercraftX 1.8" />
<meta property="og:description" content="Play minecraft 1.8 in your browser" />
<meta property="og:image" content="favicon.png" />
<link type="image/png" rel="shortcut icon" href="favicon.png" />
<script type="text/javascript" src="classes.js"></script>
<script type="text/javascript" src="eaglerpocketmobile.user.js"></script>
<script type="text/javascript">
"use strict";
window.addEventListener("load", () => {
if(document.location.href.startsWith("file:")) {
alert("HTTP please, do not open this file locally, run a local HTTP server and load it via HTTP");
}else {
// %%%%%%%%% launch options %%%%%%%%%%%%
const relayId = Math.floor(Math.random() * 3);
window.eaglercraftXOpts = {
demoMode: false,
container: "game_frame",
assetsURI: "assets.epk",
localesURI: "lang/",
worldsDB: "worlds",
servers: [
{ addr: "wss://zentic.cc", name: "Zentic" }
],
relays: [
{ addr: "wss://relay.deev.is/", comment: "lax1dude relay #1", primary: relayId == 0 },
{ addr: "wss://relay.lax1dude.net/", comment: "lax1dude relay #2", primary: relayId == 1 },
{ addr: "wss://relay.shhnowisnottheti.me/", comment: "ayunami relay #1", primary: relayId == 2 },
{ addr: "wss://eaglerrelay.glitch.me", comment: "hellscaped public relay #1", primary: relayId == 3 }
]
};
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
var q = window.location.search;
if(typeof q === "string" && q.startsWith("?")) {
q = new URLSearchParams(q);
var s = q.get("server");
if(s) window.eaglercraftXOpts.joinServer = s;
}
main();
}
});
</script>
</head>
<body style="margin:0px;width:100vw;height:100vh;overflow:hidden;" id="game_frame">
</body>
</html>

1683
mobile/lang/af_ZA.lang Normal file

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more