1
0
mirror of https://github.com/zumbiepig/MineXLauncher.git synced 2025-06-08 07:44:48 +00:00

format with prettier

This commit is contained in:
zumbiepig 2024-09-07 08:25:55 -07:00
parent 9c68039064
commit 42f97d6f35
No known key found for this signature in database
GPG Key ID: 17C891BE28B953DE
42 changed files with 912 additions and 512 deletions

View File

@ -12,6 +12,8 @@ jobs:
uses: oven-sh/setup-bun@v2 uses: oven-sh/setup-bun@v2
- name: Install dependencies - name: Install dependencies
run: bun install --frozen-lockfile run: bun install --frozen-lockfile
- name: Check formatting
run: bun run format:check
- name: Lint - name: Lint
run: bun run lint run: bun run lint
- name: Build - name: Build

3
.prettierignore Normal file
View File

@ -0,0 +1,3 @@
src/game/
!src/game/web/*.html
src/resources/mods/downloads/

View File

@ -1,5 +1,5 @@
{ {
"printWidth": 200, "printWidth": 120,
"useTabs": true, "useTabs": true,
"singleQuote": true "singleQuote": true
} }

View File

@ -1,7 +1,3 @@
{ {
"recommendations": [ "recommendations": ["oven.bun-vscode", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode"]
"oven.bun-vscode",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode"
]
} }

View File

@ -1,5 +1,5 @@
{ {
"editor.defaultFormatter": "esbenp.prettier-vscode", "editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnPaste": true, "editor.formatOnPaste": true,
"livePreview.serverRoot": "public", "livePreview.serverRoot": "public"
} }

View File

@ -70,7 +70,7 @@ if (!isDev) {
minifyCSS: true, minifyCSS: true,
minifyJS: true, minifyJS: true,
continueOnParseError: true, continueOnParseError: true,
}) }),
); );
}); });
@ -84,7 +84,7 @@ if (!isDev) {
//optionsPreset: 'medium-obfuscation', //optionsPreset: 'medium-obfuscation',
target: 'browser', target: 'browser',
}) })
.getObfuscatedCode() .getObfuscatedCode(),
); );
}); });
} }
@ -104,8 +104,8 @@ writeFileSync(
JSON.stringify( JSON.stringify(
getFiles(publicDir).map((asset) => { getFiles(publicDir).map((asset) => {
return asset.replace(new RegExp(`^${publicDir}`), '').replace(/\/index\.html$/, '/'); return asset.replace(new RegExp(`^${publicDir}`), '').replace(/\/index\.html$/, '/');
}) }),
) ),
); );
console.log(chalk.green('Build complete!\n')); console.log(chalk.green('Build complete!\n'));

BIN
bun.lockb

Binary file not shown.

View File

@ -8,7 +8,9 @@
"lint": "eslint ./src/resources/scripts/ && tsc", "lint": "eslint ./src/resources/scripts/ && tsc",
"lint:fix": "eslint --fix ./src/resources/scripts/ && tsc", "lint:fix": "eslint --fix ./src/resources/scripts/ && tsc",
"build": "NODE_ENV=production bun run ./build.ts", "build": "NODE_ENV=production bun run ./build.ts",
"build:dev": "NODE_ENV=development bun run ./build.ts" "build:dev": "NODE_ENV=development bun run ./build.ts",
"format": "prettier --write .",
"format:check": "prettier --check ."
}, },
"dependencies": { "dependencies": {
"chalk": "^5.3.0", "chalk": "^5.3.0",
@ -39,6 +41,7 @@
"eslint": "^9.9.1", "eslint": "^9.9.1",
"html-minifier": "^4.0.0", "html-minifier": "^4.0.0",
"javascript-obfuscator": "^4.1.1", "javascript-obfuscator": "^4.1.1",
"prettier": "^3.3.3",
"typescript-eslint": "^8.4.0" "typescript-eslint": "^8.4.0"
}, },
"peerDependencies": { "peerDependencies": {

View File

@ -28,7 +28,7 @@ debugLogger('Booting server.');
app.use( app.use(
helmet({ helmet({
contentSecurityPolicy: false, contentSecurityPolicy: false,
}) }),
); );
app.use(morgan(isDev ? 'dev' : 'combined')); app.use(morgan(isDev ? 'dev' : 'combined'));
@ -64,7 +64,9 @@ app
}) })
.on('error', (error) => { .on('error', (error) => {
if (error.code === 'EADDRINUSE') { if (error.code === 'EADDRINUSE') {
console.error(chalk.red('EADDRINUSE') + chalk.gray(': ') + chalk.bold(`Failed to start server. Is port ${PORT} in use?`)); console.error(
chalk.red('EADDRINUSE') + chalk.gray(': ') + chalk.bold(`Failed to start server. Is port ${PORT} in use?`),
);
process.exit(1); process.exit(1);
} }
}); });

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -13,7 +13,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -31,7 +38,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -39,7 +48,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -21,32 +28,32 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()"> <li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/updates.webp" />
<span class="nav-text">Updates</span> <span>Updates</span>
</li> </li>
<li class="nav-item" onclick="navigate.home.game()"> <li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Game</span> <span>Game</span>
</li> </li>
<li class="nav-item" onclick="navigate.servers()"> <li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/servers.webp" />
<span class="nav-text">Server List</span> <span>Server List</span>
</li> </li>
<li class="nav-item" onclick="navigate.mods.mods()"> <li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/mods.webp" />
<span class="nav-text">Mods</span> <span>Mods</span>
</li> </li>
<li class="nav-item selected" onclick="navigate.articles()"> <li class="selected" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/articles.webp" />
<span class="nav-text">Tutorials</span> <span>Tutorials</span>
</li> </li>
<li class="nav-item" onclick="navigate.settings()"> <li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/settings.webp" />
<span class="nav-text">Settings</span> <span>Settings</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -60,14 +67,22 @@
<img class="article-icon" loading="lazy" src="/resources/images/icons/articles/mc-server.webp" /> <img class="article-icon" loading="lazy" src="/resources/images/icons/articles/mc-server.webp" />
<div class="article-details"> <div class="article-details">
<strong class="article-name">How To Make An Eaglercraft Server</strong> <strong class="article-name">How To Make An Eaglercraft Server</strong>
<p class="article-description">Have you ever wondered how to make an Eaglercraft Server? Read this article to find out how!</p> <p class="article-description">
Have you ever wondered how to make an Eaglercraft Server? Read this article to find out how!
</p>
</div> </div>
</div> </div>
<div class="article-item" onclick="article.open('cloudflare-tunnel')"> <div class="article-item" onclick="article.open('cloudflare-tunnel')">
<img class="article-icon" loading="lazy" src="/resources/images/icons/articles/cloudflare-tunnel.webp" /> <img
class="article-icon"
loading="lazy"
src="/resources/images/icons/articles/cloudflare-tunnel.webp"
/>
<div class="article-details"> <div class="article-details">
<strong class="article-name">Setting Up a Cloudflare Tunnel for an Eaglercraft Server</strong> <strong class="article-name">Setting Up a Cloudflare Tunnel for an Eaglercraft Server</strong>
<p class="article-description">This brief guide walks you through configuring a Cloudflare Tunnel for your Eaglercraft server.</p> <p class="article-description">
This brief guide walks you through configuring a Cloudflare Tunnel for your Eaglercraft server.
</p>
</div> </div>
</div> </div>
</div> </div>
@ -76,7 +91,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -84,7 +101,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div id="article-mc-server" class="article"> <div id="article-mc-server" class="article">
<div class="article-content"> <div class="article-content">
@ -96,16 +120,27 @@
<h3>Prerequisites</h3> <h3>Prerequisites</h3>
<ul> <ul>
<li>A server/computer with stable internet access and decent bandwidth</li> <li>A server/computer with stable internet access and decent bandwidth</li>
<li>Java 17 installed (Get it from <a href="https://adoptium.net/temurin/releases/?version=17" target="_blank">here</a>)</li> <li>
Java 17 installed (Get it from
<a href="https://adoptium.net/temurin/releases/?version=17" target="_blank">here</a>)
</li>
<li>Basic knowledge of your OS's command-line/terminal</li> <li>Basic knowledge of your OS's command-line/terminal</li>
<li>Access to your network router (for port forwarding)</li> <li>Access to your network router (for port forwarding)</li>
</ul> </ul>
<h3>Step 1: Set Up Bungee</h3> <h3>Step 1: Set Up Bungee</h3>
<ol> <ol>
<li>Download the latest version of Bungee from <a href="https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar" target="_blank">here</a>.</li> <li>
Download the latest version of Bungee from
<a
href="https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar"
target="_blank"
>here</a
>.
</li>
<li>Create a new directory for your server and place the Bungee JAR file in it</li> <li>Create a new directory for your server and place the Bungee JAR file in it</li>
<li> <li>
Create a start script (e.g., <code>start.bat</code> for Windows or <code>start.sh</code> for Linux) with the following content: Create a start script (e.g., <code>start.bat</code> for Windows or <code>start.sh</code> for Linux) with the
following content:
<pre><code>java -Xms512M -Xmx512M -jar bungee.jar</code></pre> <pre><code>java -Xms512M -Xmx512M -jar bungee.jar</code></pre>
</li> </li>
<li>Run the start script to generate configuration files, then stop the server</li> <li>Run the start script to generate configuration files, then stop the server</li>
@ -116,18 +151,30 @@
<li>Download a compatible Minecraft server JAR (e.g., Paper)</li> <li>Download a compatible Minecraft server JAR (e.g., Paper)</li>
<li>Set up the backend server in a separate directory</li> <li>Set up the backend server in a separate directory</li>
<li> <li>
Create a start script (e.g., <code>start.bat</code> for Windows or <code>start.sh</code> for Linux) with the following content: Create a start script (e.g., <code>start.bat</code> for Windows or <code>start.sh</code> for Linux) with the
following content:
<pre><code>java -Xms1024M -Xmx1024M -jar server.jar</code></pre> <pre><code>java -Xms1024M -Xmx1024M -jar server.jar</code></pre>
</li> </li>
<li>Configure <code>server.properties</code> (Disable online mode, change the port, etc.)</li> <li>Configure <code>server.properties</code> (Disable online mode, change the port, etc.)</li>
<li>Configure <code>spigot.yml</code> to have this: <code>bungeecord: true</code></li> <li>Configure <code>spigot.yml</code> to have this: <code>bungeecord: true</code></li>
<li>If your server is on a different version than 1.8.8, you need to download the <a href="https://viaversion.com/setup" target="_blank">ViaVersion plugins</a>.</li> <li>
<li>Add the backend server to your Bungee <code>config.yml</code> by scrolling to the servers section and editing/adding an entry for your server, such as <code>localhost:port</code>.</li> If your server is on a different version than 1.8.8, you need to download the
<a href="https://viaversion.com/setup" target="_blank">ViaVersion plugins</a>.
</li>
<li>
Add the backend server to your Bungee <code>config.yml</code> by scrolling to the servers section and
editing/adding an entry for your server, such as <code>localhost:port</code>.
</li>
</ol> </ol>
<h3>Step 3: Install EaglerXBungee Plugin</h3> <h3>Step 3: Install EaglerXBungee Plugin</h3>
<ol> <ol>
<li> <li>
Download the EaglerXBungee plugin from <a href="https://git.eaglercraft.rip/eaglercraft/eaglercraft-builds/raw/branch/main/EaglercraftX_1.8_EaglerXBungee.jar" target="_blank">here</a>. Download the EaglerXBungee plugin from
<a
href="https://git.eaglercraft.rip/eaglercraft/eaglercraft-builds/raw/branch/main/EaglercraftX_1.8_EaglerXBungee.jar"
target="_blank"
>here</a
>.
</li> </li>
<li>Place the downloaded JAR file in the Bungee server's <code>plugins</code> folder</li> <li>Place the downloaded JAR file in the Bungee server's <code>plugins</code> folder</li>
<li>Restart the Bungee server to generate the plugin's configuration files</li> <li>Restart the Bungee server to generate the plugin's configuration files</li>
@ -144,7 +191,10 @@
<h3>Step 5: Port Forwarding</h3> <h3>Step 5: Port Forwarding</h3>
<ol> <ol>
<li>Access your router's admin panel</li> <li>Access your router's admin panel</li>
<li>Set up port forwarding for port <code>8081</code> (or whichever port you configured for EaglerXBungee) to your server's local IP address</li> <li>
Set up port forwarding for port <code>8081</code> (or whichever port you configured for EaglerXBungee) to
your server's local IP address
</li>
</ol> </ol>
<h3>Step 6: Domain Configuration (Optional)</h3> <h3>Step 6: Domain Configuration (Optional)</h3>
<p>If you want to use a custom domain:</p> <p>If you want to use a custom domain:</p>
@ -158,12 +208,18 @@
<li>Restart Caddy to apply these changes, using <code>caddy stop</code> and <code>caddy start</code>.</li> <li>Restart Caddy to apply these changes, using <code>caddy stop</code> and <code>caddy start</code>.</li>
</ol> </ol>
<h3>Step 7: Connecting to Your Server</h3> <h3>Step 7: Connecting to Your Server</h3>
<p>Players can connect to your server using an Eaglercraft client such as MineXLauncher, and entering your server's IP address or domain and port.</p> <p>
Players can connect to your server using an Eaglercraft client such as MineXLauncher, and entering your
server's IP address or domain and port.
</p>
<p>Examples:</p> <p>Examples:</p>
<li><code>wss://localhost</code></li> <li><code>wss://localhost</code></li>
<li><code>wss://example.com</code></li> <li><code>wss://example.com</code></li>
<h3>Security Considerations</h3> <h3>Security Considerations</h3>
<p>Ensure you keep all software (especially the EaglerXBungee plugin) up to date and properly secure your server to protect against potential vulnerabilities.</p> <p>
Ensure you keep all software (especially the EaglerXBungee plugin) up to date and properly secure your server
to protect against potential vulnerabilities.
</p>
</div> </div>
</div> </div>
<div id="article-cloudflare-tunnel" class="article"> <div id="article-cloudflare-tunnel" class="article">
@ -171,7 +227,10 @@
<span class="close-button" onclick="article.close('cloudflare-tunnel')">&times;</span> <span class="close-button" onclick="article.close('cloudflare-tunnel')">&times;</span>
<h1>Setting Up a Cloudflare Tunnel for an Eaglercraft Server</h1> <h1>Setting Up a Cloudflare Tunnel for an Eaglercraft Server</h1>
<h5>Written by zumbiepig and SpeedSlicer</h5> <h5>Written by zumbiepig and SpeedSlicer</h5>
<p>In this guide, we'll walk you through the steps to set up a Cloudflare Tunnel for your Eaglercraft server, which is running on <code>ws://localhost:8081</code>.</p> <p>
In this guide, we'll walk you through the steps to set up a Cloudflare Tunnel for your Eaglercraft server,
which is running on <code>ws://localhost:8081</code>.
</p>
<h3>Prerequisites</h3> <h3>Prerequisites</h3>
<ul> <ul>
<li>An Eaglercraft server running on <code>ws://localhost:8081</code></li> <li>An Eaglercraft server running on <code>ws://localhost:8081</code></li>
@ -180,7 +239,10 @@
</ul> </ul>
<h3>Step 1: Access Cloudflare Tunnels</h3> <h3>Step 1: Access Cloudflare Tunnels</h3>
<ol> <ol>
<li>Go to the <a href="https://dash.cloudflare.com/" target="_blank">Dashboard</a> and log in to your Cloudflare account.</li> <li>
Go to the <a href="https://dash.cloudflare.com/" target="_blank">Dashboard</a> and log in to your Cloudflare
account.
</li>
<li>Navigate to the <strong>Zero Trust</strong> page using the navigation bar on the left.</li> <li>Navigate to the <strong>Zero Trust</strong> page using the navigation bar on the left.</li>
<li>Sign up for Cloudflare Zero Trust with the Free Plan if you have not already.</li> <li>Sign up for Cloudflare Zero Trust with the Free Plan if you have not already.</li>
<li>Once you are in the dashboard, navigate to <strong>Networks</strong> > <strong>Tunnels</strong>.</li> <li>Once you are in the dashboard, navigate to <strong>Networks</strong> > <strong>Tunnels</strong>.</li>
@ -190,7 +252,10 @@
<li>Click on <strong>Create a tunnel</strong>, and select <strong>Cloudflared</strong>.</li> <li>Click on <strong>Create a tunnel</strong>, and select <strong>Cloudflared</strong>.</li>
<li>Click <strong>Next</strong>.</li> <li>Click <strong>Next</strong>.</li>
<li>Enter a name for the tunnel.</li> <li>Enter a name for the tunnel.</li>
<li>Follow the instructions provided on the site to install the tunnel.<br />You should do these instructions on the computer that your Eaglercraft server is running on.</li> <li>
Follow the instructions provided on the site to install the tunnel.<br />You should do these instructions on
the computer that your Eaglercraft server is running on.
</li>
</ol> </ol>
<h3>Step 3: Configure Domain/Subdomain</h3> <h3>Step 3: Configure Domain/Subdomain</h3>
<ol> <ol>
@ -202,7 +267,10 @@
<ol> <ol>
<li>Start your Eaglercraft server.</li> <li>Start your Eaglercraft server.</li>
<li>In Eaglercraft, connect to the domain or subdomain you set up.</li> <li>In Eaglercraft, connect to the domain or subdomain you set up.</li>
<li>You're all set! Players can now join your server using the domain that you linked your tunnel to.<br />Example: <code>wss://example.com</code></li> <li>
You're all set! Players can now join your server using the domain that you linked your tunnel to.<br />Example:
<code>wss://example.com</code>
</li>
</ol> </ol>
</div> </div>
</div> </div>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -21,32 +28,32 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()"> <li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/updates.webp" />
<span class="nav-text">Updates</span> <span>Updates</span>
</li> </li>
<li class="nav-item selected" onclick="navigate.home.game()"> <li class="selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Game</span> <span>Game</span>
</li> </li>
<li class="nav-item" onclick="navigate.servers()"> <li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/servers.webp" />
<span class="nav-text">Server List</span> <span>Server List</span>
</li> </li>
<li class="nav-item" onclick="navigate.mods.mods()"> <li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/mods.webp" />
<span class="nav-text">Mods</span> <span>Mods</span>
</li> </li>
<li class="nav-item" onclick="navigate.articles()"> <li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/articles.webp" />
<span class="nav-text">Tutorials</span> <span>Tutorials</span>
</li> </li>
<li class="nav-item" onclick="navigate.settings()"> <li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/settings.webp" />
<span class="nav-text">Settings</span> <span>Settings</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -183,7 +190,6 @@
<option value="22m02a">22m02a</option> <option value="22m02a">22m02a</option>
<option value="22m01a">22m01a</option> <option value="22m01a">22m01a</option>
</optgroup> </optgroup>
</optgroup>
<optgroup label="Pre-Releases"> <optgroup label="Pre-Releases">
<option value="21m12-24">21m12-24</option> <option value="21m12-24">21m12-24</option>
<option value="21m12-17">21m12-17</option> <option value="21m12-17">21m12-17</option>
@ -205,15 +211,32 @@
</select> </select>
<button class="archive-button" onclick="game.archive('b1.3')">Open</button> <button class="archive-button" onclick="game.archive('b1.3')">Open</button>
</div> </div>
<button class="archive-link" onclick="window.open('https://archive.eaglercraft.rip/EaglercraftX_1.8/server/')">1.8 EaglerXBungee Jar</button> <button
<button class="archive-link" onclick="window.open('https://archive.eaglercraft.rip/Eaglercraft_1.5/server/')">Eaglercraft 1.5 Server</button> class="archive-link"
<button class="archive-link" onclick="window.open('https://archive.eaglercraft.rip/Eaglercraft_b1.3/server/')">Eaglercraft Beta 1.3 Server</button> onclick="window.open('https://archive.eaglercraft.rip/EaglercraftX_1.8/server/')"
>
1.8 EaglerXBungee Jar
</button>
<button
class="archive-link"
onclick="window.open('https://archive.eaglercraft.rip/Eaglercraft_1.5/server/')"
>
Eaglercraft 1.5 Server
</button>
<button
class="archive-link"
onclick="window.open('https://archive.eaglercraft.rip/Eaglercraft_b1.3/server/')"
>
Eaglercraft Beta 1.3 Server
</button>
</div> </div>
</div> </div>
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -221,7 +244,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -21,32 +28,32 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()"> <li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/updates.webp" />
<span class="nav-text">Updates</span> <span>Updates</span>
</li> </li>
<li class="nav-item selected" onclick="navigate.home.game()"> <li class="selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Game</span> <span>Game</span>
</li> </li>
<li class="nav-item" onclick="navigate.servers()"> <li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/servers.webp" />
<span class="nav-text">Server List</span> <span>Server List</span>
</li> </li>
<li class="nav-item" onclick="navigate.mods.mods()"> <li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/mods.webp" />
<span class="nav-text">Mods</span> <span>Mods</span>
</li> </li>
<li class="nav-item" onclick="navigate.articles()"> <li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/articles.webp" />
<span class="nav-text">Tutorials</span> <span>Tutorials</span>
</li> </li>
<li class="nav-item" onclick="navigate.settings()"> <li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/settings.webp" />
<span class="nav-text">Settings</span> <span>Settings</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -98,7 +105,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -106,7 +115,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -21,32 +28,32 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()"> <li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/updates.webp" />
<span class="nav-text">Updates</span> <span>Updates</span>
</li> </li>
<li class="nav-item selected" onclick="navigate.home.game()"> <li class="selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Game</span> <span>Game</span>
</li> </li>
<li class="nav-item" onclick="navigate.servers()"> <li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/servers.webp" />
<span class="nav-text">Server List</span> <span>Server List</span>
</li> </li>
<li class="nav-item" onclick="navigate.mods.mods()"> <li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/mods.webp" />
<span class="nav-text">Mods</span> <span>Mods</span>
</li> </li>
<li class="nav-item" onclick="navigate.articles()"> <li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/articles.webp" />
<span class="nav-text">Tutorials</span> <span>Tutorials</span>
</li> </li>
<li class="nav-item" onclick="navigate.settings()"> <li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/settings.webp" />
<span class="nav-text">Settings</span> <span>Settings</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -90,7 +97,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -21,32 +28,32 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()"> <li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/updates.webp" />
<span class="nav-text">Updates</span> <span>Updates</span>
</li> </li>
<li class="nav-item selected" onclick="navigate.home.game()"> <li class="selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Game</span> <span>Game</span>
</li> </li>
<li class="nav-item" onclick="navigate.servers()"> <li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/servers.webp" />
<span class="nav-text">Server List</span> <span>Server List</span>
</li> </li>
<li class="nav-item" onclick="navigate.mods.mods()"> <li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/mods.webp" />
<span class="nav-text">Mods</span> <span>Mods</span>
</li> </li>
<li class="nav-item" onclick="navigate.articles()"> <li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/articles.webp" />
<span class="nav-text">Tutorials</span> <span>Tutorials</span>
</li> </li>
<li class="nav-item" onclick="navigate.settings()"> <li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/settings.webp" />
<span class="nav-text">Settings</span> <span>Settings</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -118,7 +125,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -126,7 +135,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -9,7 +9,10 @@
<link rel="manifest" href="/manifest.json" /> <link rel="manifest" href="/manifest.json" />
<link rel="canonical" href="https://launcher.orionzleon.me/" /> <link rel="canonical" href="https://launcher.orionzleon.me/" />
<meta name="theme-color" content="#333" /> <meta name="theme-color" content="#333" />
<meta name="description" content="MineXLauncher is a custom launcher for Eaglercraft that has many versions and clients." /> <meta
name="description"
content="MineXLauncher is a custom launcher for Eaglercraft that has many versions and clients."
/>
<meta <meta
name="keywords" name="keywords"
content="minex, minexlauncher, launcher, custom launcher, modded minecraft, modded, minecraft, minecraft eaglercraft, eaglercraft, eaglercraftx, eaglercraftl, eagler, eaglerx, eaglerl, download, unblocked, minecraft versions, 1.2.5, 1.5.2, 1.5, 1.8, 1.8.8, 1.9, 1.9.4, 1.12, 1.3, 1.7.3, b1.3, b1.7.3, alpha, alpha 1.2.6, beta, beta 1.3, beta 1.7.3, a1.2.6, resent, shadow, client, resent client, shadow client, cracked, crack, cracked minecraft, hack, hacked, hacks, hacked client, hack client, free minecraft, pvp, minecraft download, offline, online, web, host, hosted, servers, multiplayer, custom launcher, skins, packs, textures, resource, mods, mod, mod download, pack download, texture download, texture pack download, fps, high fps, better fps, high fps, speed, fast, faster, lag, laggy, no lag, eaglerforge, forge, javascript, hack launcher, exploits, cheats, grief, griefing, mine" content="minex, minexlauncher, launcher, custom launcher, modded minecraft, modded, minecraft, minecraft eaglercraft, eaglercraft, eaglercraftx, eaglercraftl, eagler, eaglerx, eaglerl, download, unblocked, minecraft versions, 1.2.5, 1.5.2, 1.5, 1.8, 1.8.8, 1.9, 1.9.4, 1.12, 1.3, 1.7.3, b1.3, b1.7.3, alpha, alpha 1.2.6, beta, beta 1.3, beta 1.7.3, a1.2.6, resent, shadow, client, resent client, shadow client, cracked, crack, cracked minecraft, hack, hacked, hacks, hacked client, hack client, free minecraft, pvp, minecraft download, offline, online, web, host, hosted, servers, multiplayer, custom launcher, skins, packs, textures, resource, mods, mod, mod download, pack download, texture download, texture pack download, fps, high fps, better fps, high fps, speed, fast, faster, lag, laggy, no lag, eaglerforge, forge, javascript, hack launcher, exploits, cheats, grief, griefing, mine"
@ -18,7 +21,10 @@
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:image" content="/resources/images/icons/minexlauncher.webp" /> <meta property="og:image" content="/resources/images/icons/minexlauncher.webp" />
<meta property="og:url" content="https://launcher.orionzleon.me/" /> <meta property="og:url" content="https://launcher.orionzleon.me/" />
<meta property="og:description" content="MineXLauncher is a custom launcher for Eaglercraft that has many versions and clients." /> <meta
property="og:description"
content="MineXLauncher is a custom launcher for Eaglercraft that has many versions and clients."
/>
<meta property="og:locale" content="en-US" /> <meta property="og:locale" content="en-US" />
<script src="/resources/scripts/google-tag.js"></script> <script src="/resources/scripts/google-tag.js"></script>
<script src="/resources/scripts/main.js"></script> <script src="/resources/scripts/main.js"></script>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -18,12 +18,12 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item selected" onclick="navigate.mobile()"> <li class="selected" onclick="navigate.mobile()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Mobile Site</span> <span>Mobile Site</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -37,14 +37,22 @@
</div> </div>
<div class="installations"> <div class="installations">
<button class="play-button" onclick="game.play('/game/web/main/1.8.8/?mobile=true')">Play</button> <button class="play-button" onclick="game.play('/game/web/main/1.8.8/?mobile=true')">Play</button>
<a class="play-button" style="text-decoration: none" href="/game/offline/mobile/EaglerPocketMobile_1.8.8.html" download>Download Offline</a> <a
class="play-button"
style="text-decoration: none"
href="/game/offline/mobile/EaglerPocketMobile_1.8.8.html"
download
>Download Offline</a
>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -21,32 +28,32 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()"> <li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/updates.webp" />
<span class="nav-text">Updates</span> <span>Updates</span>
</li> </li>
<li class="nav-item" onclick="navigate.home.game()"> <li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Game</span> <span>Game</span>
</li> </li>
<li class="nav-item" onclick="navigate.servers()"> <li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/servers.webp" />
<span class="nav-text">Server List</span> <span>Server List</span>
</li> </li>
<li class="nav-item selected" onclick="navigate.mods.mods()"> <li class="selected" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/mods.webp" />
<span class="nav-text">Mods</span> <span>Mods</span>
</li> </li>
<li class="nav-item" onclick="navigate.articles()"> <li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/articles.webp" />
<span class="nav-text">Tutorials</span> <span>Tutorials</span>
</li> </li>
<li class="nav-item" onclick="navigate.settings()"> <li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/settings.webp" />
<span class="nav-text">Settings</span> <span>Settings</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -67,7 +74,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -75,7 +84,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -21,32 +28,32 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()"> <li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/updates.webp" />
<span class="nav-text">Updates</span> <span>Updates</span>
</li> </li>
<li class="nav-item" onclick="navigate.home.game()"> <li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Game</span> <span>Game</span>
</li> </li>
<li class="nav-item" onclick="navigate.servers()"> <li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/servers.webp" />
<span class="nav-text">Server List</span> <span>Server List</span>
</li> </li>
<li class="nav-item selected" onclick="navigate.mods.mods()"> <li class="selected" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/mods.webp" />
<span class="nav-text">Mods</span> <span>Mods</span>
</li> </li>
<li class="nav-item" onclick="navigate.articles()"> <li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/articles.webp" />
<span class="nav-text">Tutorials</span> <span>Tutorials</span>
</li> </li>
<li class="nav-item" onclick="navigate.settings()"> <li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/settings.webp" />
<span class="nav-text">Settings</span> <span>Settings</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -64,7 +71,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -72,7 +81,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -13,7 +13,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -31,7 +38,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -39,7 +48,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -19,12 +19,12 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item selected" href="/offline/"> <li class="selected" href="/offline/">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Offline</span> <span>Offline</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -61,11 +61,17 @@
<img src="/resources/images/icons/clients/all.webp" /> <img src="/resources/images/icons/clients/all.webp" />
<span>1.2.5</span> <span>1.2.5</span>
</div> </div>
<div class="custom-option" onclick="game.select('/game/offline/main/Eaglercraft_b1.7.3.html', 'Beta 1.7.3')"> <div
class="custom-option"
onclick="game.select('/game/offline/main/Eaglercraft_b1.7.3.html', 'Beta 1.7.3')"
>
<img src="/resources/images/icons/clients/all.webp" /> <img src="/resources/images/icons/clients/all.webp" />
<span>Beta 1.7.3</span> <span>Beta 1.7.3</span>
</div> </div>
<div class="custom-option" onclick="game.select('/game/offline/main/Eaglercraft_b1.3.html', 'Beta 1.3')"> <div
class="custom-option"
onclick="game.select('/game/offline/main/Eaglercraft_b1.3.html', 'Beta 1.3')"
>
<img src="/resources/images/icons/clients/all.webp" /> <img src="/resources/images/icons/clients/all.webp" />
<span>Beta 1.3</span> <span>Beta 1.3</span>
</div> </div>
@ -86,7 +92,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -94,7 +102,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -44,11 +44,17 @@
"updates": [ "updates": [
{ {
"version": "1.6.1", "version": "1.6.1",
"changelog": ["Eaglercraft 1.9 has been updated to v0.7.0", "Tutorials have been added to the launcher, go check them out!"] "changelog": [
"Eaglercraft 1.9 has been updated to v0.7.0",
"Tutorials have been added to the launcher, go check them out!"
]
}, },
{ {
"version": "1.6", "version": "1.6",
"changelog": ["You can now install mods directly from the mods list", "Bugfix: Themes no longer flicker when navigating"] "changelog": [
"You can now install mods directly from the mods list",
"Bugfix: Themes no longer flicker when navigating"
]
}, },
{ {
"version": "1.5", "version": "1.5",

View File

@ -14,7 +14,19 @@ window.addEventListener('load', function () {
{ addr: 'wss://relay.shhnowisnottheti.me/', name: 'ayunami relay #1', primary: relayId === 2 }, { addr: 'wss://relay.shhnowisnottheti.me/', name: 'ayunami relay #1', primary: relayId === 2 },
], ],
mainMenu: { mainMenu: {
splashes: ['Darviglet!', 'eaglerenophile!', 'You Eagler!', 'Yeeeeeee!', 'yeee', 'EEEEEEEEE!', 'You Darvig!', 'You Vigg!', ':>', '|>', 'You Yumpster!'], splashes: [
'Darviglet!',
'eaglerenophile!',
'You Eagler!',
'Yeeeeeee!',
'yeee',
'EEEEEEEEE!',
'You Darvig!',
'You Vigg!',
':>',
'|>',
'You Yumpster!',
],
eaglerLogo: false, eaglerLogo: false,
}, },
}; };

View File

@ -2,7 +2,10 @@
// @ts-nocheck // @ts-nocheck
if (new URLSearchParams(window.location.search).get('mobile') === 'true') { if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
try { try {
unsafeWindow.console.warn("DANGER: This userscript is using unsafeWindow. Unsafe websites could potentially use this to gain access to data and other content that the browser normally wouldn't allow!"), Object.defineProperty(window, 'clientWindow', { value: unsafeWindow }); unsafeWindow.console.warn(
"DANGER: This userscript is using unsafeWindow. Unsafe websites could potentially use this to gain access to data and other content that the browser normally wouldn't allow!",
),
Object.defineProperty(window, 'clientWindow', { value: unsafeWindow });
} catch { } catch {
Object.defineProperty(window, 'clientWindow', { value: window }); Object.defineProperty(window, 'clientWindow', { value: window });
} }
@ -135,7 +138,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (...A) { function (...A) {
if (A[0].isValid || !clientWindow.keyboardFix) return I.apply(this, A); if (A[0].isValid || !clientWindow.keyboardFix) return I.apply(this, A);
}, },
...g ...g,
) )
: i.call(this, A, I, ...g); : i.call(this, A, I, ...g);
}, },
@ -206,7 +209,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
(g.hidden = !0), (g.style.display = 'none'); (g.hidden = !0), (g.style.display = 'none');
}, },
{ passive: !1, once: !0 } { passive: !1, once: !0 },
), ),
clientWindow.addEventListener( clientWindow.addEventListener(
'focus', 'focus',
@ -215,7 +218,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
(g.hidden = !0), (g.style.display = 'none'); (g.hidden = !0), (g.style.display = 'none');
}, 300); }, 300);
}, },
{ once: !0 } { once: !0 },
), ),
document.body.appendChild(g)), document.body.appendChild(g)),
g g
@ -235,7 +238,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
A.preventDefault(); A.preventDefault();
}, },
!1 !1,
), ),
i.addEventListener('contextmenu', function (A) { i.addEventListener('contextmenu', function (A) {
A.preventDefault(); A.preventDefault();
@ -263,17 +266,19 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
g.preventDefault(); g.preventDefault();
const e = g.targetTouches[0]; const e = g.targetTouches[0];
A || ((A = e.pageX), (I = e.pageY)), (g.movementX = e.pageX - A), (g.movementY = e.pageY - I); A || ((A = e.pageX), (I = e.pageY)), (g.movementX = e.pageX - A), (g.movementY = e.pageY - I);
var C = clientWindow.fakelock ? new MouseEvent('mousemove', { movementX: g.movementX, movementY: g.movementY }) : new WheelEvent('wheel', { wheelDeltaY: g.movementY }); var C = clientWindow.fakelock
? new MouseEvent('mousemove', { movementX: g.movementX, movementY: g.movementY })
: new WheelEvent('wheel', { wheelDeltaY: g.movementY });
i.dispatchEvent(C), (A = e.pageX), (I = e.pageY); i.dispatchEvent(C), (A = e.pageX), (I = e.pageY);
}, },
!1 !1,
), ),
i.addEventListener( i.addEventListener(
'touchend', 'touchend',
function (g) { function (g) {
(A = null), (I = null); (A = null), (I = null);
}, },
!1 !1,
), ),
d(null != clientWindow.fakelock); d(null != clientWindow.fakelock);
let e = Z('strafeRightButton', 'inGame', 'div'); let e = Z('strafeRightButton', 'inGame', 'div');
@ -287,7 +292,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('w', 'keydown'), e.classList.remove('hide'), c.classList.remove('hide'), n.classList.add('active'); C('w', 'keydown'), e.classList.remove('hide'), c.classList.remove('hide'), n.classList.add('active');
}, },
!1 !1,
), ),
n.addEventListener( n.addEventListener(
'touchmove', 'touchmove',
@ -296,16 +301,28 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
const I = A.targetTouches[0]; const I = A.targetTouches[0];
g || (g = I.pageX); g || (g = I.pageX);
let i = I.pageX - g; let i = I.pageX - g;
10 * i > clientWindow.innerHeight ? (e.classList.add('active'), c.classList.remove('active'), C('d', 'keydown'), C('a', 'keyup')) : 10 * i < 0 - clientWindow.innerHeight ? (c.classList.add('active'), e.classList.remove('active'), C('a', 'keydown'), C('d', 'keyup')) : (e.classList.remove('active'), c.classList.remove('active')); 10 * i > clientWindow.innerHeight
? (e.classList.add('active'), c.classList.remove('active'), C('d', 'keydown'), C('a', 'keyup'))
: 10 * i < 0 - clientWindow.innerHeight
? (c.classList.add('active'), e.classList.remove('active'), C('a', 'keydown'), C('d', 'keyup'))
: (e.classList.remove('active'), c.classList.remove('active'));
}, },
!1 !1,
), ),
n.addEventListener( n.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('w', 'keyup'), C('d', 'keyup'), C('a', 'keyup'), e.classList.remove('active'), c.classList.remove('active'), e.classList.add('hide'), c.classList.add('hide'), n.classList.remove('active'), (g = null); C('w', 'keyup'),
C('d', 'keyup'),
C('a', 'keyup'),
e.classList.remove('active'),
c.classList.remove('active'),
e.classList.add('hide'),
c.classList.add('hide'),
n.classList.remove('active'),
(g = null);
}, },
!1 !1,
), ),
e.classList.add('hide'), e.classList.add('hide'),
c.classList.add('hide'), c.classList.add('hide'),
@ -317,14 +334,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('d', 'keydown'); C('d', 'keydown');
}, },
!1 !1,
), ),
o.addEventListener( o.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('d', 'keyup'); C('d', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(o); document.body.appendChild(o);
let l = Z('leftButton', 'inGame'); let l = Z('leftButton', 'inGame');
@ -334,14 +351,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('a', 'keydown'); C('a', 'keydown');
}, },
!1 !1,
), ),
l.addEventListener( l.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('a', 'keyup'); C('a', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(l); document.body.appendChild(l);
let b = Z('backButton', 'inGame'); let b = Z('backButton', 'inGame');
@ -351,14 +368,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('s', 'keydown'); C('s', 'keydown');
}, },
!1 !1,
), ),
b.addEventListener( b.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('s', 'keyup'); C('s', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(b); document.body.appendChild(b);
let w = Z('jumpButton', 'inGame'); let w = Z('jumpButton', 'inGame');
@ -368,14 +385,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C(' ', 'keydown'); C(' ', 'keydown');
}, },
!1 !1,
), ),
w.addEventListener( w.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C(' ', 'keyup'); C(' ', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(w); document.body.appendChild(w);
let M = Z('crouchButton', 'inGame'); let M = Z('crouchButton', 'inGame');
@ -389,14 +406,16 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
(clientWindow.crouchLock = null != clientWindow.crouchLock), M.classList.toggle('active'); (clientWindow.crouchLock = null != clientWindow.crouchLock), M.classList.toggle('active');
}, 1e3)); }, 1e3));
}, },
!1 !1,
), ),
M.addEventListener( M.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
clientWindow.crouchLock || (C('shift', 'keyup'), M.classList.remove('active'), (clientWindow.crouchLock = !1)), clearTimeout(clientWindow.crouchTimer); clientWindow.crouchLock ||
(C('shift', 'keyup'), M.classList.remove('active'), (clientWindow.crouchLock = !1)),
clearTimeout(clientWindow.crouchTimer);
}, },
!1 !1,
), ),
document.body.appendChild(M); document.body.appendChild(M);
let v = Z('inventoryButton', 'inGame'); let v = Z('inventoryButton', 'inGame');
@ -406,14 +425,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('e', 'keydown'); C('e', 'keydown');
}, },
!1 !1,
), ),
v.addEventListener( v.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('e', 'keyup'); C('e', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(v); document.body.appendChild(v);
let m = Z('exitButton', 'inMenu'); let m = Z('exitButton', 'inMenu');
@ -423,53 +442,71 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('`', 'keydown'); C('`', 'keydown');
}, },
!1 !1,
), ),
m.addEventListener( m.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('`', 'keyup'); C('`', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(m); document.body.appendChild(m);
let h = document.createElement('input', !0); let h = document.createElement('input', !0);
(h.id = 'hiddenInput'), (h.id = 'hiddenInput'),
h.classList.add('inMenu'), h.classList.add('inMenu'),
(h.style.cssText = 'position:absolute;top: 0vh; margin: auto; left: 8vh; right:0vh; width: 8vh; height: 8vh;font-size:20px;z-index: -10;color: transparent;text-shadow: 0 0 0 black;'), (h.style.cssText =
'position:absolute;top: 0vh; margin: auto; left: 8vh; right:0vh; width: 8vh; height: 8vh;font-size:20px;z-index: -10;color: transparent;text-shadow: 0 0 0 black;'),
h.addEventListener( h.addEventListener(
'beforeinput', 'beforeinput',
function (A) { function (A) {
A.stopImmediatePropagation(), A.preventDefault(!0); A.stopImmediatePropagation(), A.preventDefault(!0);
let I = 'insertLineBreak' == A.inputType ? 'return' : null == A.data ? 'delete' : A.data.slice(-1); let I = 'insertLineBreak' == A.inputType ? 'return' : null == A.data ? 'delete' : A.data.slice(-1);
if ((clientWindow.lastKey || (clientWindow.console.warn('Enabling blocking duplicate key events. Some functionality may be lost.'), (clientWindow.inputFix = !0)), clientWindow.keyboardFix)) if (
(clientWindow.lastKey ||
(clientWindow.console.warn('Enabling blocking duplicate key events. Some functionality may be lost.'),
(clientWindow.inputFix = !0)),
clientWindow.keyboardFix)
)
if ('insertLineBreak' == A.inputType) C('enter', 'keydown'), C('enter', 'keyup'); if ('insertLineBreak' == A.inputType) C('enter', 'keydown'), C('enter', 'keyup');
else { else {
const g = A.inputType.slice(0, 1); const g = A.inputType.slice(0, 1);
if ('i' == g && A.data) { if ('i' == g && A.data) {
if (clientWindow.lastKey == I && clientWindow.blockNextInput && clientWindow.inputFix) clientWindow.blockNextInput = !1; if (clientWindow.lastKey == I && clientWindow.blockNextInput && clientWindow.inputFix)
clientWindow.blockNextInput = !1;
else { else {
I.toLowerCase() != I ? (C('shift', 'keydown'), C(I, 'keydown'), C(I, 'keyup'), C('shift', 'keyup')) : (C(I, 'keydown'), C(I, 'keyup')), (clientWindow.blockNextInput = !0); I.toLowerCase() != I
? (C('shift', 'keydown'), C(I, 'keydown'), C(I, 'keyup'), C('shift', 'keyup'))
: (C(I, 'keydown'), C(I, 'keyup')),
(clientWindow.blockNextInput = !0);
} }
} else ('d' != g && A.data) || (C('backspace', 'keydown'), C('backspace', 'keyup'), (clientWindow.blockNextInput = !1)); } else
('d' != g && A.data) ||
(C('backspace', 'keydown'), C('backspace', 'keyup'), (clientWindow.blockNextInput = !1));
} }
(clientWindow.lastKey = I), (h.value = ' '); (clientWindow.lastKey = I), (h.value = ' ');
}, },
!1 !1,
), ),
h.addEventListener( h.addEventListener(
'input', 'input',
function (A) { function (A) {
' ' != h.value && (h.value = ' '); ' ' != h.value && (h.value = ' ');
}, },
!1 !1,
), ),
h.addEventListener( h.addEventListener(
'keydown', 'keydown',
function (A) { function (A) {
(229 != A.keyCode && 229 != A.which) || clientWindow.keyboardFix || (clientWindow.console.warn('Switching from keydown to input events due to invalid KeyboardEvent. Some functionality will be lost.'), (clientWindow.keyboardFix = !0), clientWindow.lastKey && (C(clientWindow.lastKey, 'keydown'), C(clientWindow.lastKey, 'keyup'))); (229 != A.keyCode && 229 != A.which) ||
clientWindow.keyboardFix ||
(clientWindow.console.warn(
'Switching from keydown to input events due to invalid KeyboardEvent. Some functionality will be lost.',
),
(clientWindow.keyboardFix = !0),
clientWindow.lastKey && (C(clientWindow.lastKey, 'keydown'), C(clientWindow.lastKey, 'keyup')));
}, },
!1 !1,
), ),
h.addEventListener('blur', function (A) { h.addEventListener('blur', function (A) {
clientWindow.hiddenInputFocused = !1; clientWindow.hiddenInputFocused = !1;
@ -482,14 +519,15 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
A.preventDefault(); A.preventDefault();
}, },
!1 !1,
), ),
a.addEventListener( a.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
A.preventDefault(), clientWindow.hiddenInputFocused ? h.blur() : (h.select(), (clientWindow.hiddenInputFocused = !0)); A.preventDefault(),
clientWindow.hiddenInputFocused ? h.blur() : (h.select(), (clientWindow.hiddenInputFocused = !0));
}, },
!1 !1,
), ),
document.body.appendChild(a); document.body.appendChild(a);
let p = Z('placeButton', 'inGame'); let p = Z('placeButton', 'inGame');
@ -499,14 +537,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
t(2, 'mousedown', i); t(2, 'mousedown', i);
}, },
!1 !1,
), ),
p.addEventListener( p.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
t(2, 'mouseup', i); t(2, 'mouseup', i);
}, },
!1 !1,
), ),
document.body.appendChild(p); document.body.appendChild(p);
let R = Z('breakButton', 'inGame'); let R = Z('breakButton', 'inGame');
@ -516,14 +554,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
t(0, 'mousedown', i); t(0, 'mousedown', i);
}, },
!1 !1,
), ),
R.addEventListener( R.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
t(0, 'mouseup', i); t(0, 'mouseup', i);
}, },
!1 !1,
), ),
document.body.appendChild(R); document.body.appendChild(R);
let W = Z('selectButton', 'inGame'); let W = Z('selectButton', 'inGame');
@ -533,14 +571,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
t(1, 'mousedown', i); t(1, 'mousedown', i);
}, },
!1 !1,
), ),
W.addEventListener( W.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
t(1, 'mouseup', i); t(1, 'mouseup', i);
}, },
!1 !1,
), ),
document.body.appendChild(W); document.body.appendChild(W);
let u = Z('scrollUpButton', 'inGame'); let u = Z('scrollUpButton', 'inGame');
@ -550,7 +588,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
G(i, -10); G(i, -10);
}, },
!1 !1,
), ),
document.body.appendChild(u); document.body.appendChild(u);
let Y = Z('scrollDownButton', 'inGame'); let Y = Z('scrollDownButton', 'inGame');
@ -560,7 +598,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
G(i, 10); G(i, 10);
}, },
!1 !1,
), ),
document.body.appendChild(Y); document.body.appendChild(Y);
let S = Z('throwButton', 'inGame'); let S = Z('throwButton', 'inGame');
@ -570,14 +608,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('q', 'keydown'); C('q', 'keydown');
}, },
!1 !1,
), ),
S.addEventListener( S.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('q', 'keyup'); C('q', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(S); document.body.appendChild(S);
let j = Z('sprintButton', 'inGame'); let j = Z('sprintButton', 'inGame');
@ -591,14 +629,16 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
(clientWindow.sprintLock = null != clientWindow.sprintLock), j.classList.toggle('active'); (clientWindow.sprintLock = null != clientWindow.sprintLock), j.classList.toggle('active');
}, 1e3)); }, 1e3));
}, },
!1 !1,
), ),
j.addEventListener( j.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
clientWindow.sprintLock || (C('r', 'keyup'), j.classList.remove('active'), (clientWindow.sprintLock = !1)), clearTimeout(clientWindow.sprintTimer); clientWindow.sprintLock ||
(C('r', 'keyup'), j.classList.remove('active'), (clientWindow.sprintLock = !1)),
clearTimeout(clientWindow.sprintTimer);
}, },
!1 !1,
), ),
document.body.appendChild(j); document.body.appendChild(j);
let y = Z('pauseButton', 'inGame'); let y = Z('pauseButton', 'inGame');
@ -608,14 +648,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('`', 'keydown'); C('`', 'keydown');
}, },
!1 !1,
), ),
y.addEventListener( y.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('`', 'keyup'); C('`', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(y); document.body.appendChild(y);
let L = Z('chatButton', 'inGame'); let L = Z('chatButton', 'inGame');
@ -625,7 +665,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('t', 'keydown'); C('t', 'keydown');
}, },
!1 !1,
), ),
document.body.appendChild(L); document.body.appendChild(L);
let N = Z('perspectiveButton', 'inGame'); let N = Z('perspectiveButton', 'inGame');
@ -635,14 +675,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('f', 'keydown'), C('5', 'keydown'); C('f', 'keydown'), C('5', 'keydown');
}, },
!1 !1,
), ),
N.addEventListener( N.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('f', 'keyup'), C('5', 'keyup'); C('f', 'keyup'), C('5', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(N); document.body.appendChild(N);
let U = Z('screenshotButton', 'inGame'); let U = Z('screenshotButton', 'inGame');
@ -652,14 +692,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('f', 'keydown'), C('2', 'keydown'); C('f', 'keydown'), C('2', 'keydown');
}, },
!1 !1,
), ),
U.addEventListener( U.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('f', 'keyup'), C('2', 'keyup'); C('f', 'keyup'), C('2', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(U); document.body.appendChild(U);
let z = Z('coordinatesButton', 'inGame'); let z = Z('coordinatesButton', 'inGame');
@ -669,14 +709,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) { function (A) {
C('f', 'keydown'), C('3', 'keydown'); C('f', 'keydown'), C('3', 'keydown');
}, },
!1 !1,
), ),
z.addEventListener( z.addEventListener(
'touchend', 'touchend',
function (A) { function (A) {
C('f', 'keyup'), C('3', 'keyup'); C('f', 'keyup'), C('3', 'keyup');
}, },
!1 !1,
), ),
document.body.appendChild(z); document.body.appendChild(z);
})(); })();

View File

@ -160,7 +160,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
} }
return fn.apply(this, args); // Appends the rest of the function specified by addEventListener return fn.apply(this, args); // Appends the rest of the function specified by addEventListener
}, },
...rest ...rest,
); );
} else { } else {
// If it's not a keydown event, behave like normal (hopefully) // If it's not a keydown event, behave like normal (hopefully)
@ -200,14 +200,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
clientY: event.clientY, clientY: event.clientY,
screenX: event.screenX, screenX: event.screenX,
screenY: event.screenY, screenY: event.screenY,
}) }),
); );
} }
function wheelEvent(element, delta) { function wheelEvent(element, delta) {
element.dispatchEvent( element.dispatchEvent(
new WheelEvent('wheel', { new WheelEvent('wheel', {
wheelDeltaY: delta, wheelDeltaY: delta,
}) }),
); );
} }
function setButtonVisibility(pointerLocked) { function setButtonVisibility(pointerLocked) {
@ -285,7 +285,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
element.hidden = true; element.hidden = true;
element.style.display = 'none'; element.style.display = 'none';
}, },
{ passive: false, once: true } { passive: false, once: true },
); );
window.addEventListener( window.addEventListener(
'focus', 'focus',
@ -295,7 +295,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
element.style.display = 'none'; element.style.display = 'none';
}, 300); }, 300);
}, },
{ once: true } { once: true },
); );
document.body.appendChild(element); document.body.appendChild(element);
} }
@ -347,7 +347,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
e.preventDefault(); e.preventDefault();
}, },
false false,
); );
touchButton.addEventListener('contextmenu', function (e) { touchButton.addEventListener('contextmenu', function (e) {
e.preventDefault(); e.preventDefault();
@ -393,7 +393,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
} }
} }
}, },
false false,
); );
canvas.addEventListener( canvas.addEventListener(
@ -411,7 +411,8 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
if (primaryTouch) { if (primaryTouch) {
primaryTouch.distanceX = primaryTouch.clientX - canvasTouchStartX; primaryTouch.distanceX = primaryTouch.clientX - canvasTouchStartX;
primaryTouch.distanceY = primaryTouch.clientY - canvasTouchStartY; primaryTouch.distanceY = primaryTouch.clientY - canvasTouchStartY;
primaryTouch.squaredNorm = primaryTouch.distanceX * primaryTouch.distanceX + primaryTouch.distanceY * primaryTouch.distanceY; primaryTouch.squaredNorm =
primaryTouch.distanceX * primaryTouch.distanceX + primaryTouch.distanceY * primaryTouch.distanceY;
primaryTouch.movementX = primaryTouch.clientX - canvasTouchPreviousX; primaryTouch.movementX = primaryTouch.clientX - canvasTouchPreviousX;
primaryTouch.movementY = primaryTouch.clientY - canvasTouchPreviousY; primaryTouch.movementY = primaryTouch.clientY - canvasTouchPreviousY;
if (window.canvasTouchMode == 1) { if (window.canvasTouchMode == 1) {
@ -439,7 +440,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
screenY: primaryTouch.screenY, // The top four are used for item position when in GUI's, the bottom two are for moving the camera inGame screenY: primaryTouch.screenY, // The top four are used for item position when in GUI's, the bottom two are for moving the camera inGame
movementX: primaryTouch.movementX, movementX: primaryTouch.movementX,
movementY: primaryTouch.movementY, movementY: primaryTouch.movementY,
}) }),
); );
} }
} }
@ -447,7 +448,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
canvasTouchPreviousY = primaryTouch.clientY; canvasTouchPreviousY = primaryTouch.clientY;
} }
}, },
false false,
); );
function canvasTouchEnd(e) { function canvasTouchEnd(e) {
@ -495,7 +496,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
strafeLeftButton.classList.remove('hide'); strafeLeftButton.classList.remove('hide');
forwardButton.classList.add('active'); forwardButton.classList.add('active');
}, },
false false,
); );
forwardButton.addEventListener( forwardButton.addEventListener(
'touchmove', 'touchmove',
@ -523,7 +524,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
strafeLeftButton.classList.remove('active'); strafeLeftButton.classList.remove('active');
} }
}, },
false false,
); );
forwardButton.addEventListener( forwardButton.addEventListener(
'touchend', 'touchend',
@ -539,7 +540,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
buttonTouchStartX = null; buttonTouchStartX = null;
}, },
false false,
); );
strafeRightButton.classList.add('hide'); strafeRightButton.classList.add('hide');
strafeLeftButton.classList.add('hide'); strafeLeftButton.classList.add('hide');
@ -552,14 +553,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
keyEvent('d', 'keydown'); keyEvent('d', 'keydown');
}, },
false false,
); );
rightButton.addEventListener( rightButton.addEventListener(
'touchend', 'touchend',
function (e) { function (e) {
keyEvent('d', 'keyup'); keyEvent('d', 'keyup');
}, },
false false,
); );
document.body.appendChild(rightButton); document.body.appendChild(rightButton);
const leftButton = createTouchButton('leftButton', 'inGame'); const leftButton = createTouchButton('leftButton', 'inGame');
@ -569,14 +570,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
keyEvent('a', 'keydown'); keyEvent('a', 'keydown');
}, },
false false,
); );
leftButton.addEventListener( leftButton.addEventListener(
'touchend', 'touchend',
function (e) { function (e) {
keyEvent('a', 'keyup'); keyEvent('a', 'keyup');
}, },
false false,
); );
document.body.appendChild(leftButton); document.body.appendChild(leftButton);
const backButton = createTouchButton('backButton', 'inGame'); const backButton = createTouchButton('backButton', 'inGame');
@ -586,14 +587,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
keyEvent('s', 'keydown'); keyEvent('s', 'keydown');
}, },
false false,
); );
backButton.addEventListener( backButton.addEventListener(
'touchend', 'touchend',
function (e) { function (e) {
keyEvent('s', 'keyup'); keyEvent('s', 'keyup');
}, },
false false,
); );
document.body.appendChild(backButton); document.body.appendChild(backButton);
const jumpButton = createTouchButton('jumpButton', 'inGame'); const jumpButton = createTouchButton('jumpButton', 'inGame');
@ -603,14 +604,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
keyEvent(' ', 'keydown'); keyEvent(' ', 'keydown');
}, },
false false,
); );
jumpButton.addEventListener( jumpButton.addEventListener(
'touchend', 'touchend',
function (e) { function (e) {
keyEvent(' ', 'keyup'); keyEvent(' ', 'keyup');
}, },
false false,
); );
document.body.appendChild(jumpButton); document.body.appendChild(jumpButton);
@ -627,7 +628,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
crouchButton.classList.toggle('active'); crouchButton.classList.toggle('active');
}, 1000); }, 1000);
}, },
false false,
); );
crouchButton.addEventListener( crouchButton.addEventListener(
@ -640,7 +641,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
} }
clearTimeout(window.crouchTimer); clearTimeout(window.crouchTimer);
}, },
false false,
); );
document.body.appendChild(crouchButton); document.body.appendChild(crouchButton);
const inventoryButton = createTouchButton('inventoryButton', 'inGame'); const inventoryButton = createTouchButton('inventoryButton', 'inGame');
@ -651,7 +652,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
keyEvent('e', 'keydown'); keyEvent('e', 'keydown');
}, },
false false,
); );
inventoryButton.addEventListener( inventoryButton.addEventListener(
'touchend', 'touchend',
@ -660,7 +661,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('shift', 'keyup'); // Sometimes shift gets stuck on, which interferes with item manipulation in GUI's keyEvent('shift', 'keyup'); // Sometimes shift gets stuck on, which interferes with item manipulation in GUI's
keyEvent('e', 'keyup'); keyEvent('e', 'keyup');
}, },
false false,
); );
document.body.appendChild(inventoryButton); document.body.appendChild(inventoryButton);
const exitButton = createTouchButton('exitButton', 'inMenu'); const exitButton = createTouchButton('exitButton', 'inMenu');
@ -671,14 +672,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
keyEvent('`', 'keydown'); keyEvent('`', 'keydown');
}, },
false false,
); );
exitButton.addEventListener( exitButton.addEventListener(
'touchend', 'touchend',
function (e) { function (e) {
keyEvent('`', 'keyup'); keyEvent('`', 'keyup');
}, },
false false,
); );
document.body.appendChild(exitButton); document.body.appendChild(exitButton);
// ---Input Handling--- // ---Input Handling---
@ -703,7 +704,8 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
const hiddenInput = document.createElement('input', true); const hiddenInput = document.createElement('input', true);
hiddenInput.id = 'hiddenInput'; hiddenInput.id = 'hiddenInput';
hiddenInput.classList.add('inMenu'); hiddenInput.classList.add('inMenu');
hiddenInput.style.cssText = 'position:absolute;top: 0vh; margin: auto; left: 8vh; right:0vh; width: 8vh; height: 8vh;font-size:20px;z-index: -10;color: transparent;text-shadow: 0 0 0 black;'; // We hide the input behind a key because display: none and opacity:0 causes issues hiddenInput.style.cssText =
'position:absolute;top: 0vh; margin: auto; left: 8vh; right:0vh; width: 8vh; height: 8vh;font-size:20px;z-index: -10;color: transparent;text-shadow: 0 0 0 black;'; // We hide the input behind a key because display: none and opacity:0 causes issues
hiddenInput.addEventListener( hiddenInput.addEventListener(
'beforeinput', 'beforeinput',
function (e) { function (e) {
@ -753,7 +755,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
window.lastKey = inputData; // Saves the last key pressed window.lastKey = inputData; // Saves the last key pressed
hiddenInput.value = ' '; //This previously allowed us to have a character to delete, but beforeinput doesn't require this. This does allow us to check wether Duplicate Mode is necessary though hiddenInput.value = ' '; //This previously allowed us to have a character to delete, but beforeinput doesn't require this. This does allow us to check wether Duplicate Mode is necessary though
}, },
false false,
); );
hiddenInput.addEventListener( hiddenInput.addEventListener(
'input', 'input',
@ -764,14 +766,16 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
hiddenInput.value = ' '; hiddenInput.value = ' ';
} }
}, },
false false,
); );
hiddenInput.addEventListener( hiddenInput.addEventListener(
'keydown', 'keydown',
function (e) { function (e) {
// Enables Compatibility Mode if we receive an invalid key press event // Enables Compatibility Mode if we receive an invalid key press event
if ((e.keyCode == 229 || e.which == 229) && !window.keyboardFix) { if ((e.keyCode == 229 || e.which == 229) && !window.keyboardFix) {
window.console.warn('Switching from keydown to input events due to invalid KeyboardEvent. Some functionality will be lost.'); window.console.warn(
'Switching from keydown to input events due to invalid KeyboardEvent. Some functionality will be lost.',
);
window.keyboardFix = true; window.keyboardFix = true;
if (window.lastKey) { if (window.lastKey) {
// Resend the last saved key press (which is being tracked by the beforeinput event listener) so the transition to Compatibility Mode isn't noticeable // Resend the last saved key press (which is being tracked by the beforeinput event listener) so the transition to Compatibility Mode isn't noticeable
@ -780,7 +784,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
} }
} }
}, },
false false,
); );
hiddenInput.addEventListener('blur', function (e) { hiddenInput.addEventListener('blur', function (e) {
// Updates window.hiddenInputFocused to reflect the actual state of the focus // Updates window.hiddenInputFocused to reflect the actual state of the focus
@ -795,7 +799,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
e.preventDefault(); e.preventDefault();
}, },
false false,
); );
keyboardButton.addEventListener( keyboardButton.addEventListener(
'touchend', 'touchend',
@ -808,7 +812,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
window.hiddenInputFocused = true; window.hiddenInputFocused = true;
} }
}, },
false false,
); );
document.body.appendChild(keyboardButton); document.body.appendChild(keyboardButton);
const placeButton = createTouchButton('placeButton', 'inGame'); const placeButton = createTouchButton('placeButton', 'inGame');
@ -818,14 +822,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
mouseEvent(2, 'mousedown', canvas); mouseEvent(2, 'mousedown', canvas);
}, },
false false,
); );
placeButton.addEventListener( placeButton.addEventListener(
'touchend', 'touchend',
function (e) { function (e) {
mouseEvent(2, 'mouseup', canvas); mouseEvent(2, 'mouseup', canvas);
}, },
false false,
); );
document.body.appendChild(placeButton); document.body.appendChild(placeButton);
const breakButton = createTouchButton('breakButton', 'inGame'); const breakButton = createTouchButton('breakButton', 'inGame');
@ -835,14 +839,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
mouseEvent(0, 'mousedown', canvas); mouseEvent(0, 'mousedown', canvas);
}, },
false false,
); );
breakButton.addEventListener( breakButton.addEventListener(
'touchend', 'touchend',
function (e) { function (e) {
mouseEvent(0, 'mouseup', canvas); mouseEvent(0, 'mouseup', canvas);
}, },
false false,
); );
document.body.appendChild(breakButton); document.body.appendChild(breakButton);
const selectButton = createTouchButton('selectButton', 'inGame'); const selectButton = createTouchButton('selectButton', 'inGame');
@ -852,14 +856,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
mouseEvent(1, 'mousedown', canvas); mouseEvent(1, 'mousedown', canvas);
}, },
false false,
); );
selectButton.addEventListener( selectButton.addEventListener(
'touchend', 'touchend',
function (e) { function (e) {
mouseEvent(1, 'mouseup', canvas); mouseEvent(1, 'mouseup', canvas);
}, },
false false,
); );
document.body.appendChild(selectButton); document.body.appendChild(selectButton);
const scrollUpButton = createTouchButton('scrollUpButton', 'inGame'); const scrollUpButton = createTouchButton('scrollUpButton', 'inGame');
@ -870,7 +874,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
wheelEvent(canvas, -10); wheelEvent(canvas, -10);
}, },
false false,
); );
document.body.appendChild(scrollUpButton); document.body.appendChild(scrollUpButton);
const scrollDownButton = createTouchButton('scrollDownButton', 'inGame'); const scrollDownButton = createTouchButton('scrollDownButton', 'inGame');
@ -881,7 +885,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
wheelEvent(canvas, 10); wheelEvent(canvas, 10);
}, },
false false,
); );
document.body.appendChild(scrollDownButton); document.body.appendChild(scrollDownButton);
const throwButton = createTouchButton('throwButton', 'inGame'); const throwButton = createTouchButton('throwButton', 'inGame');
@ -892,14 +896,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
keyEvent('q', 'keydown'); keyEvent('q', 'keydown');
}, },
false false,
); );
throwButton.addEventListener( throwButton.addEventListener(
'touchend', 'touchend',
function (e) { function (e) {
keyEvent('q', 'keyup'); keyEvent('q', 'keyup');
}, },
false false,
); );
document.body.appendChild(throwButton); document.body.appendChild(throwButton);
const sprintButton = createTouchButton('sprintButton', 'inGame'); const sprintButton = createTouchButton('sprintButton', 'inGame');
@ -914,7 +918,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
sprintButton.classList.toggle('active'); sprintButton.classList.toggle('active');
}, 1000); }, 1000);
}, },
false false,
); );
sprintButton.addEventListener( sprintButton.addEventListener(
@ -927,7 +931,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
} }
clearTimeout(window.sprintTimer); clearTimeout(window.sprintTimer);
}, },
false false,
); );
document.body.appendChild(sprintButton); document.body.appendChild(sprintButton);
const pauseButton = createTouchButton('pauseButton', 'inGame'); const pauseButton = createTouchButton('pauseButton', 'inGame');
@ -938,14 +942,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
keyEvent('`', 'keydown'); keyEvent('`', 'keydown');
}, },
false false,
); );
pauseButton.addEventListener( pauseButton.addEventListener(
'touchend', 'touchend',
function (e) { function (e) {
keyEvent('`', 'keyup'); keyEvent('`', 'keyup');
}, },
false false,
); );
document.body.appendChild(pauseButton); document.body.appendChild(pauseButton);
const chatButton = createTouchButton('chatButton', 'inGame'); const chatButton = createTouchButton('chatButton', 'inGame');
@ -956,7 +960,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) { function (e) {
keyEvent('t', 'keydown'); keyEvent('t', 'keydown');
}, },
false false,
); // For some reason dispatching a keyup event for this closes the chat, which is really weird ); // For some reason dispatching a keyup event for this closes the chat, which is really weird
document.body.appendChild(chatButton); document.body.appendChild(chatButton);
const perspectiveButton = createTouchButton('perspectiveButton', 'inGame'); const perspectiveButton = createTouchButton('perspectiveButton', 'inGame');
@ -968,7 +972,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keydown'); keyEvent('f', 'keydown');
keyEvent('5', 'keydown'); keyEvent('5', 'keydown');
}, },
false false,
); );
perspectiveButton.addEventListener( perspectiveButton.addEventListener(
'touchend', 'touchend',
@ -976,7 +980,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keyup'); keyEvent('f', 'keyup');
keyEvent('5', 'keyup'); keyEvent('5', 'keyup');
}, },
false false,
); );
document.body.appendChild(perspectiveButton); document.body.appendChild(perspectiveButton);
const screenshotButton = createTouchButton('screenshotButton', 'inGame'); const screenshotButton = createTouchButton('screenshotButton', 'inGame');
@ -988,7 +992,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keydown'); keyEvent('f', 'keydown');
keyEvent('2', 'keydown'); keyEvent('2', 'keydown');
}, },
false false,
); );
screenshotButton.addEventListener( screenshotButton.addEventListener(
'touchend', 'touchend',
@ -996,7 +1000,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keyup'); keyEvent('f', 'keyup');
keyEvent('2', 'keyup'); keyEvent('2', 'keyup');
}, },
false false,
); );
document.body.appendChild(screenshotButton); document.body.appendChild(screenshotButton);
const coordinatesButton = createTouchButton('coordinatesButton', 'inGame'); const coordinatesButton = createTouchButton('coordinatesButton', 'inGame');
@ -1008,7 +1012,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keydown'); keyEvent('f', 'keydown');
keyEvent('3', 'keydown'); keyEvent('3', 'keydown');
}, },
false false,
); );
coordinatesButton.addEventListener( coordinatesButton.addEventListener(
'touchend', 'touchend',
@ -1016,7 +1020,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keyup'); keyEvent('f', 'keyup');
keyEvent('3', 'keyup'); keyEvent('3', 'keyup');
}, },
false false,
); );
document.body.appendChild(coordinatesButton); document.body.appendChild(coordinatesButton);
} }

View File

@ -7,7 +7,10 @@ let articleAnimationLock = false;
const theme = { const theme = {
load: function (themeToLoad?: string) { load: function (themeToLoad?: string) {
const themeElement = document.querySelector('#theme') as HTMLLinkElement | null; const themeElement = document.querySelector('#theme') as HTMLLinkElement | null;
if (themeElement) themeElement.href = themeToLoad ? `/resources/styles/themes/${themeToLoad}.css` : `/resources/styles/themes/${storage.local.get('theme') ?? 'default'}.css`; if (themeElement)
themeElement.href = themeToLoad
? `/resources/styles/themes/${themeToLoad}.css`
: `/resources/styles/themes/${storage.local.get('theme') ?? 'default'}.css`;
}, },
set: function (newTheme: string) { set: function (newTheme: string) {
storage.local.set('theme', newTheme); storage.local.set('theme', newTheme);
@ -77,7 +80,9 @@ const game = {
'1.5': '15-client-version', '1.5': '15-client-version',
'b1.3': 'b13-client-version', 'b1.3': 'b13-client-version',
}; };
const dropdown = clients[client] ? (document.querySelector(`#${clients[client]}`) as HTMLSelectElement | null) : null; const dropdown = clients[client]
? (document.querySelector(`#${clients[client]}`) as HTMLSelectElement | null)
: null;
if (dropdown?.value) { if (dropdown?.value) {
selectedVersion = `https://archive.eaglercraft.rip/Eaglercraft${client === '1.8' ? 'X_1.8' : `_${client}`}/client/${dropdown.value}/index.html`; selectedVersion = `https://archive.eaglercraft.rip/Eaglercraft${client === '1.8' ? 'X_1.8' : `_${client}`}/client/${dropdown.value}/index.html`;
game.play(); game.play();
@ -174,7 +179,7 @@ const article = {
modal.addEventListener('click', closeArticleHandler); modal.addEventListener('click', closeArticleHandler);
articleAnimationLock = false; articleAnimationLock = false;
}, },
{ once: true } { once: true },
); );
} }
}, },
@ -189,7 +194,7 @@ const article = {
modal.style.display = 'none'; modal.style.display = 'none';
articleAnimationLock = false; articleAnimationLock = false;
}, },
{ once: true } { once: true },
); );
} }
}, },
@ -408,7 +413,13 @@ if (window.location.pathname === '/') {
const lastPage = storage.session.get('lastPage'); const lastPage = storage.session.get('lastPage');
const isMobile = detect.mobile(); const isMobile = detect.mobile();
const iframe = document.createElement('iframe'); const iframe = document.createElement('iframe');
iframe.src = !storage.local.get('lastVersion') ? '/welcome/' : lastPage ? lastPage : isMobile ? '/mobile/' : '/home/game/'; iframe.src = !storage.local.get('lastVersion')
? '/welcome/'
: lastPage
? lastPage
: isMobile
? '/mobile/'
: '/home/game/';
document.addEventListener('DOMContentLoaded', () => document.body.appendChild(iframe)); document.addEventListener('DOMContentLoaded', () => document.body.appendChild(iframe));
@ -429,7 +440,7 @@ if (window.location.pathname === '/') {
theme.load(); theme.load();
document.addEventListener('DOMContentLoaded', async () => { document.addEventListener('DOMContentLoaded', async () => {
const profileName = document.querySelector('.profile-name'); const profileName = document.querySelector('.profile span');
const titleBarText = document.querySelector('.title-bar span'); const titleBarText = document.querySelector('.title-bar span');
const lastVersion = storage.local.get('lastVersion'); const lastVersion = storage.local.get('lastVersion');
@ -440,8 +451,11 @@ if (window.location.pathname === '/') {
if (profileName) profileName.textContent = storage.local.get('username'); if (profileName) profileName.textContent = storage.local.get('username');
if (titleBarText) titleBarText.textContent += ` ${currentVersion}`; if (titleBarText) titleBarText.textContent += ` ${currentVersion}`;
if (
lastVersion &&
// @ts-expect-error // @ts-expect-error
if (lastVersion && gt(coerce(currentVersion, { includePrerelease: true }), coerce(lastVersion, { includePrerelease: true }))) { gt(coerce(currentVersion, { includePrerelease: true }), coerce(lastVersion, { includePrerelease: true }))
) {
alert(`MineXLauncher has been updated to v${currentVersion}!\n\nChanges in v${currentVersion}:\n${changelog}`); alert(`MineXLauncher has been updated to v${currentVersion}!\n\nChanges in v${currentVersion}:\n${changelog}`);
storage.local.set('lastVersion', currentVersion); storage.local.set('lastVersion', currentVersion);
} }
@ -469,7 +483,7 @@ if (window.location.pathname === '/') {
if (window.location.pathname === '/settings/') { if (window.location.pathname === '/settings/') {
document.addEventListener('DOMContentLoaded', async () => { document.addEventListener('DOMContentLoaded', async () => {
const profileName = document.querySelector('.profile-name'); const profileName = document.querySelector('.profile span');
const usernameInput = document.querySelector('#username-input') as HTMLInputElement | null; const usernameInput = document.querySelector('#username-input') as HTMLInputElement | null;
const themeSelect = document.querySelector('#theme-select') as HTMLSelectElement | null; const themeSelect = document.querySelector('#theme-select') as HTMLSelectElement | null;
const offlineCheckbox = document.querySelector('#offline-checkbox') as HTMLInputElement | null; const offlineCheckbox = document.querySelector('#offline-checkbox') as HTMLInputElement | null;
@ -506,7 +520,7 @@ if (window.location.pathname === '/settings/') {
if (offlineCheckbox.checked) { if (offlineCheckbox.checked) {
sw.register('/sw-full.js'); sw.register('/sw-full.js');
alert( alert(
'Offline cache is now downloading.\nThe download size is about 1GB, so it may take a while.\n\nPlease do not leave this page while the download is in progress.\nYou will be notified when the download is complete.' 'Offline cache is now downloading.\nThe download size is about 1GB, so it may take a while.\n\nPlease do not leave this page while the download is in progress.\nYou will be notified when the download is complete.',
); );
} else { } else {
sw.register('/sw.js'); sw.register('/sw.js');
@ -567,12 +581,15 @@ if (window.location.pathname === '/settings/') {
// storage.local.set('offlineCache', offlineCheckbox?.checked ?? false); // storage.local.set('offlineCache', offlineCheckbox?.checked ?? false);
// storage.local.set('showAds', true); // storage.local.set('showAds', true);
storage.local.set('mods', []); storage.local.set('mods', []);
storage.local.set('lastVersion', (await (await fetch('/resources/data/main.json')).json()).updates[0].version); storage.local.set(
'lastVersion',
(await (await fetch('/resources/data/main.json')).json()).updates[0].version,
);
if (offlineCheckbox?.checked) { if (offlineCheckbox?.checked) {
sw.register('/sw-full.js'); sw.register('/sw-full.js');
alert( alert(
'Offline cache is now downloading.\nThe download size is about 1GB, so it may take a while.\n\nPlease do not leave this page while the download is in progress.\nYou will be notified when the download is complete.' 'Offline cache is now downloading.\nThe download size is about 1GB, so it may take a while.\n\nPlease do not leave this page while the download is in progress.\nYou will be notified when the download is complete.',
); );
} else sw.register('/sw.js'); } else sw.register('/sw.js');
@ -585,7 +602,14 @@ if (window.location.pathname === '/settings/') {
} else if (window.location.pathname === '/mods/mods/' || window.location.pathname === '/mods/resourcepacks/') { } else if (window.location.pathname === '/mods/mods/' || window.location.pathname === '/mods/resourcepacks/') {
document.addEventListener('DOMContentLoaded', async () => { document.addEventListener('DOMContentLoaded', async () => {
const addonType: 'mods' | 'resourcepacks' = window.location.pathname === '/mods/mods/' ? 'mods' : 'resourcepacks'; const addonType: 'mods' | 'resourcepacks' = window.location.pathname === '/mods/mods/' ? 'mods' : 'resourcepacks';
const addonData: { id: string; name: string; description: string; author: string; authorLink: string; source: string }[] = (await (await fetch('/resources/data/main.json')).json()).addons; const addonData: {
id: string;
name: string;
description: string;
author: string;
authorLink: string;
source: string;
}[] = (await (await fetch('/resources/data/main.json')).json()).addons;
const modList = document.querySelector('.mod-list'); const modList = document.querySelector('.mod-list');
// @ts-expect-error // @ts-expect-error
addonData[addonType].forEach((addon) => { addonData[addonType].forEach((addon) => {
@ -616,7 +640,9 @@ if (window.location.pathname === '/settings/') {
} else if (window.location.pathname === '/updates/') { } else if (window.location.pathname === '/updates/') {
document.addEventListener('DOMContentLoaded', async () => { document.addEventListener('DOMContentLoaded', async () => {
const updatesContainer = document.querySelector('.updates-container'); const updatesContainer = document.querySelector('.updates-container');
const updateData: { version: string; changelog: string[] }[] = (await (await fetch('/resources/data/main.json')).json()).updates; const updateData: { version: string; changelog: string[] }[] = (
await (await fetch('/resources/data/main.json')).json()
).updates;
updateData.forEach((update) => { updateData.forEach((update) => {
const versionHeader = document.createElement('strong'); const versionHeader = document.createElement('strong');
versionHeader.textContent = `MineXLauncher ${update.version}`; versionHeader.textContent = `MineXLauncher ${update.version}`;

View File

@ -26,8 +26,8 @@ body {
border-bottom: 1px solid #4a2f1b; border-bottom: 1px solid #4a2f1b;
} }
.nav-bar .nav-item:hover, .nav-bar li:hover,
.nav-bar .nav-item.selected { .nav-bar li.selected {
background-color: #5a3a2a; background-color: #5a3a2a;
} }

View File

@ -22,8 +22,8 @@ body {
border-bottom: 1px solid #e0d1e3; border-bottom: 1px solid #e0d1e3;
} }
.nav-bar .nav-item:hover, .nav-bar li:hover,
.nav-bar .nav-item.selected { .nav-bar li.selected {
background-color: #f4c6d0; background-color: #f4c6d0;
} }

View File

@ -67,7 +67,7 @@ body {
text-align: center; text-align: center;
} }
.profile-name { .profile span {
font-weight: bold; font-weight: bold;
display: block; display: block;
font-size: 16px; font-size: 16px;
@ -83,7 +83,7 @@ body {
scrollbar-color: #555 #333; scrollbar-color: #555 #333;
} }
.nav-bar .nav-item { .nav-bar li {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 15px 20px; padding: 15px 20px;
@ -91,18 +91,18 @@ body {
transition: background-color 0.2s; transition: background-color 0.2s;
} }
.nav-bar .nav-item:hover, .nav-bar li:hover,
.nav-bar .nav-item.selected { .nav-bar li.selected {
background-color: #444; background-color: #444;
} }
.nav-bar .nav-item .nav-icon { .nav-bar li img {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin-right: 15px; margin-right: 15px;
} }
.nav-bar .nav-item .nav-text { .nav-bar li span {
font-size: 14px; font-size: 14px;
} }
@ -249,7 +249,10 @@ body {
scrollbar-color: #048239 #035525; scrollbar-color: #048239 #035525;
max-height: 0; max-height: 0;
overflow: auto; overflow: auto;
transition: max-height 0.3s ease-out, padding 0.3s ease-out, opacity 0.3s ease-out; transition:
max-height 0.3s ease-out,
padding 0.3s ease-out,
opacity 0.3s ease-out;
} }
.custom-options.open { .custom-options.open {
@ -292,7 +295,10 @@ body {
font-size: 16px; font-size: 16px;
font-weight: bold; font-weight: bold;
text-transform: uppercase; text-transform: uppercase;
transition: background-color 0.2s, border-color 0.2s, transform 0.2s; transition:
background-color 0.2s,
border-color 0.2s,
transform 0.2s;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
} }
@ -539,11 +545,18 @@ body {
font-size: 1rem; font-size: 1rem;
cursor: pointer; cursor: pointer;
appearance: none; appearance: none;
background-image: linear-gradient(45deg, transparent 50%, #ffffff 50%), linear-gradient(135deg, #1e1e1e 50%, transparent 50%); background-image: linear-gradient(45deg, transparent 50%, #ffffff 50%),
background-position: right 0.7rem center, right 0.7rem center; linear-gradient(135deg, #1e1e1e 50%, transparent 50%);
background-position:
right 0.7rem center,
right 0.7rem center;
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 0.65rem auto, 0.65rem auto; background-size:
transition: border-color 0.3s, background-color 0.3s; 0.65rem auto,
0.65rem auto;
transition:
border-color 0.3s,
background-color 0.3s;
} }
.version-select:focus { .version-select:focus {

View File

@ -18,8 +18,8 @@ body {
background-color: #262626; background-color: #262626;
} }
.nav-bar .nav-item:hover, .nav-bar li:hover,
.nav-bar .nav-item.selected { .nav-bar li.selected {
background-color: #333; background-color: #333;
} }

View File

@ -8,7 +8,10 @@ body {
box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
} }
.title-bar, .top-title, .top-nav, .bottom-bar { .title-bar,
.top-title,
.top-nav,
.bottom-bar {
background-color: #e0e0e0; background-color: #e0e0e0;
color: #333; color: #333;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
@ -23,15 +26,17 @@ body {
border-bottom: 1px solid #ddd; border-bottom: 1px solid #ddd;
} }
.nav-bar .nav-item { .nav-bar li {
color: #333; color: #333;
} }
.nav-bar .nav-item:hover, .nav-bar .nav-item.selected { .nav-bar li:hover,
.nav-bar li.selected {
background-color: #ddd; background-color: #ddd;
} }
.main-panel, .main-content { .main-panel,
.main-content {
background-color: #fafafa; background-color: #fafafa;
} }
@ -77,7 +82,8 @@ body {
border-color: #2e7d32; border-color: #2e7d32;
} }
.bottom-bar .bottom-bar-left, .bottom-bar .bottom-bar-right { .bottom-bar .bottom-bar-left,
.bottom-bar .bottom-bar-right {
color: #333; color: #333;
} }

View File

@ -25,8 +25,8 @@ body {
color: #ff4500; color: #ff4500;
} }
.nav-bar .nav-item:hover, .nav-bar li:hover,
.nav-bar .nav-item.selected { .nav-bar li.selected {
background-color: #5c3c3c; background-color: #5c3c3c;
} }

View File

@ -25,8 +25,8 @@ body {
color: #00ff00; color: #00ff00;
} }
.nav-bar .nav-item:hover, .nav-bar li:hover,
.nav-bar .nav-item.selected { .nav-bar li.selected {
background-color: #5c7c5c; background-color: #5c7c5c;
} }

View File

@ -26,7 +26,7 @@ body {
} }
.profile, .profile,
.nav-bar .nav-item, .nav-bar li,
.installations, .installations,
.custom-select, .custom-select,
.custom-options, .custom-options,
@ -38,8 +38,8 @@ body {
color: #00ff00; color: #00ff00;
} }
.nav-bar .nav-item:hover, .nav-bar li:hover,
.nav-bar .nav-item.selected, .nav-bar li.selected,
.custom-option:hover, .custom-option:hover,
.play-button:hover, .play-button:hover,
.minecraft-button:hover, .minecraft-button:hover,

View File

@ -18,8 +18,8 @@ body {
box-shadow: 0 2px 4px rgba(255, 255, 255, 0.2); box-shadow: 0 2px 4px rgba(255, 255, 255, 0.2);
} }
.nav-bar .nav-item:hover, .nav-bar li:hover,
.nav-bar .nav-item.selected { .nav-bar li.selected {
background-color: rgba(255, 255, 255, 0.1); background-color: rgba(255, 255, 255, 0.1);
color: #00ccff; color: #00ccff;
} }

View File

@ -27,8 +27,8 @@ body {
border-bottom: 1px solid #330066; border-bottom: 1px solid #330066;
} }
.nav-bar .nav-item:hover, .nav-bar li:hover,
.nav-bar .nav-item.selected { .nav-bar li.selected {
background-color: #330066; background-color: #330066;
} }

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -21,32 +28,32 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()"> <li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/updates.webp" />
<span class="nav-text">Updates</span> <span>Updates</span>
</li> </li>
<li class="nav-item" onclick="navigate.home.game()"> <li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Game</span> <span>Game</span>
</li> </li>
<li class="nav-item selected" onclick="navigate.servers()"> <li class="selected" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/servers.webp" />
<span class="nav-text">Server List</span> <span>Server List</span>
</li> </li>
<li class="nav-item" onclick="navigate.mods.mods()"> <li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/mods.webp" />
<span class="nav-text">Mods</span> <span>Mods</span>
</li> </li>
<li class="nav-item" onclick="navigate.articles()"> <li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/articles.webp" />
<span class="nav-text">Tutorials</span> <span>Tutorials</span>
</li> </li>
<li class="nav-item" onclick="navigate.settings()"> <li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/settings.webp" />
<span class="nav-text">Settings</span> <span>Settings</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -60,7 +67,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -68,7 +77,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -21,32 +28,32 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()"> <li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/updates.webp" />
<span class="nav-text">Updates</span> <span>Updates</span>
</li> </li>
<li class="nav-item" onclick="navigate.home.game()"> <li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Game</span> <span>Game</span>
</li> </li>
<li class="nav-item" onclick="navigate.servers()"> <li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/servers.webp" />
<span class="nav-text">Server List</span> <span>Server List</span>
</li> </li>
<li class="nav-item" onclick="navigate.mods.mods()"> <li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/mods.webp" />
<span class="nav-text">Mods</span> <span>Mods</span>
</li> </li>
<li class="nav-item" onclick="navigate.articles()"> <li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/articles.webp" />
<span class="nav-text">Tutorials</span> <span>Tutorials</span>
</li> </li>
<li class="nav-item selected" onclick="navigate.settings()"> <li class="selected" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/settings.webp" />
<span class="nav-text">Settings</span> <span>Settings</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -80,7 +87,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -88,7 +97,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -16,7 +16,7 @@ self.addEventListener('install', (event) => {
console.log(`Cached: ${asset} (${progress})`); console.log(`Cached: ${asset} (${progress})`);
} }
}) }),
); );
}); });
@ -32,7 +32,7 @@ self.addEventListener('activate', (event) => {
} else { } else {
return null; return null;
} }
}) }),
); );
}) })
.then(() => { .then(() => {
@ -46,7 +46,7 @@ self.addEventListener('activate', (event) => {
}); });
}); });
}); });
}) }),
); );
}); });
@ -54,6 +54,6 @@ self.addEventListener('fetch', (event) => {
event.respondWith( event.respondWith(
caches.match(event.request).then((response) => { caches.match(event.request).then((response) => {
return response ?? fetch(event.request); return response ?? fetch(event.request);
}) }),
); );
}); });

View File

@ -55,7 +55,7 @@ self.addEventListener('install', (event) => {
console.log(`Cached: ${asset} (${progress})`); console.log(`Cached: ${asset} (${progress})`);
} }
}) }),
); );
}); });
@ -69,9 +69,9 @@ self.addEventListener('activate', (event) => {
} else { } else {
return null; return null;
} }
}) }),
); );
}) }),
); );
}); });
@ -80,13 +80,13 @@ self.addEventListener('fetch', (event) => {
event.respondWith( event.respondWith(
fetch(event.request).catch(() => { fetch(event.request).catch(() => {
return caches.match(OFFLINE_URL); return caches.match(OFFLINE_URL);
}) }),
); );
} else { } else {
event.respondWith( event.respondWith(
fetch(event.request).catch(() => { fetch(event.request).catch(() => {
return caches.match(event.request); return caches.match(event.request);
}) }),
); );
} }
}); });

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head> </head>
<body> <body>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
<div class="launcher"> <div class="launcher">
<div class="title-bar"> <div class="title-bar">
@ -21,32 +28,32 @@
<div class="content"> <div class="content">
<div class="sidebar"> <div class="sidebar">
<div class="profile"> <div class="profile">
<span class="profile-name"></span> <span></span>
</div> </div>
<nav class="nav-bar"> <nav class="nav-bar">
<li class="nav-item selected" onclick="navigate.updates()"> <li class="selected" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/updates.webp" />
<span class="nav-text">Updates</span> <span>Updates</span>
</li> </li>
<li class="nav-item" onclick="navigate.home.game()"> <li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/game.webp" />
<span class="nav-text">Game</span> <span>Game</span>
</li> </li>
<li class="nav-item" onclick="navigate.servers()"> <li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/servers.webp" />
<span class="nav-text">Server List</span> <span>Server List</span>
</li> </li>
<li class="nav-item" onclick="navigate.mods.mods()"> <li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/mods.webp" />
<span class="nav-text">Mods</span> <span>Mods</span>
</li> </li>
<li class="nav-item" onclick="navigate.articles()"> <li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/articles.webp" />
<span class="nav-text">Tutorials</span> <span>Tutorials</span>
</li> </li>
<li class="nav-item" onclick="navigate.settings()"> <li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" /> <img src="/resources/images/icons/nav/settings.webp" />
<span class="nav-text">Settings</span> <span>Settings</span>
</li> </li>
</nav> </nav>
</div> </div>
@ -61,7 +68,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -69,7 +78,14 @@
</div> </div>
</div> </div>
<div class="ads-container"> <div class="ads-container">
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins> <ins
class="adsbygoogle"
style="display: block"
data-ad-client="ca-pub-1132419379737567"
data-ad-slot="3280170072"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="display: none"> <html lang="en" style="display: none">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@ -39,7 +39,9 @@
</div> </div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a> <a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
>Join the MineXLauncher Discord</a
>
</div> </div>
<div class="bottom-bar-links"> <div class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span> <span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>