1
0
mirror of https://github.com/zumbiepig/MineXLauncher.git synced 2025-06-08 03:34:47 +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
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Check formatting
run: bun run format:check
- name: Lint
run: bun run lint
- 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,
"singleQuote": true
}

View File

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

View File

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

View File

@ -70,7 +70,7 @@ if (!isDev) {
minifyCSS: true,
minifyJS: true,
continueOnParseError: true,
})
}),
);
});
@ -84,7 +84,7 @@ if (!isDev) {
//optionsPreset: 'medium-obfuscation',
target: 'browser',
})
.getObfuscatedCode()
.getObfuscatedCode(),
);
});
}
@ -104,8 +104,8 @@ writeFileSync(
JSON.stringify(
getFiles(publicDir).map((asset) => {
return asset.replace(new RegExp(`^${publicDir}`), '').replace(/\/index\.html$/, '/');
})
)
}),
),
);
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:fix": "eslint --fix ./src/resources/scripts/ && tsc",
"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": {
"chalk": "^5.3.0",
@ -39,6 +41,7 @@
"eslint": "^9.9.1",
"html-minifier": "^4.0.0",
"javascript-obfuscator": "^4.1.1",
"prettier": "^3.3.3",
"typescript-eslint": "^8.4.0"
},
"peerDependencies": {

View File

@ -28,7 +28,7 @@ debugLogger('Booting server.');
app.use(
helmet({
contentSecurityPolicy: false,
})
}),
);
app.use(morgan(isDev ? 'dev' : 'combined'));
@ -64,7 +64,9 @@ app
})
.on('error', (error) => {
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);
}
});

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -13,7 +13,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -31,7 +38,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -39,7 +48,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -21,32 +28,32 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
<span class="nav-text">Updates</span>
<li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" />
<span>Updates</span>
</li>
<li class="nav-item" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Game</span>
<li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Game</span>
</li>
<li class="nav-item" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
<span class="nav-text">Server List</span>
<li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" />
<span>Server List</span>
</li>
<li class="nav-item" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
<span class="nav-text">Mods</span>
<li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" />
<span>Mods</span>
</li>
<li class="nav-item selected" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
<span class="nav-text">Tutorials</span>
<li class="selected" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" />
<span>Tutorials</span>
</li>
<li class="nav-item" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
<span class="nav-text">Settings</span>
<li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" />
<span>Settings</span>
</li>
</nav>
</div>
@ -60,14 +67,22 @@
<img class="article-icon" loading="lazy" src="/resources/images/icons/articles/mc-server.webp" />
<div class="article-details">
<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 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">
<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>
@ -76,7 +91,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -84,7 +101,14 @@
</div>
</div>
<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 id="article-mc-server" class="article">
<div class="article-content">
@ -96,16 +120,27 @@
<h3>Prerequisites</h3>
<ul>
<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>Access to your network router (for port forwarding)</li>
</ul>
<h3>Step 1: Set Up Bungee</h3>
<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 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>
</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>Set up the backend server in a separate directory</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>
</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>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>
<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>
<h3>Step 3: Install EaglerXBungee Plugin</h3>
<ol>
<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>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>
@ -144,7 +191,10 @@
<h3>Step 5: Port Forwarding</h3>
<ol>
<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>
<h3>Step 6: Domain Configuration (Optional)</h3>
<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>
</ol>
<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>
<li><code>wss://localhost</code></li>
<li><code>wss://example.com</code></li>
<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 id="article-cloudflare-tunnel" class="article">
@ -171,7 +227,10 @@
<span class="close-button" onclick="article.close('cloudflare-tunnel')">&times;</span>
<h1>Setting Up a Cloudflare Tunnel for an Eaglercraft Server</h1>
<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>
<ul>
<li>An Eaglercraft server running on <code>ws://localhost:8081</code></li>
@ -180,7 +239,10 @@
</ul>
<h3>Step 1: Access Cloudflare Tunnels</h3>
<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>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>
@ -190,7 +252,10 @@
<li>Click on <strong>Create a tunnel</strong>, and select <strong>Cloudflared</strong>.</li>
<li>Click <strong>Next</strong>.</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>
<h3>Step 3: Configure Domain/Subdomain</h3>
<ol>
@ -202,7 +267,10 @@
<ol>
<li>Start your Eaglercraft server.</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>
</div>
</div>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -21,32 +28,32 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
<span class="nav-text">Updates</span>
<li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" />
<span>Updates</span>
</li>
<li class="nav-item selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Game</span>
<li class="selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Game</span>
</li>
<li class="nav-item" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
<span class="nav-text">Server List</span>
<li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" />
<span>Server List</span>
</li>
<li class="nav-item" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
<span class="nav-text">Mods</span>
<li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" />
<span>Mods</span>
</li>
<li class="nav-item" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
<span class="nav-text">Tutorials</span>
<li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" />
<span>Tutorials</span>
</li>
<li class="nav-item" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
<span class="nav-text">Settings</span>
<li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" />
<span>Settings</span>
</li>
</nav>
</div>
@ -183,7 +190,6 @@
<option value="22m02a">22m02a</option>
<option value="22m01a">22m01a</option>
</optgroup>
</optgroup>
<optgroup label="Pre-Releases">
<option value="21m12-24">21m12-24</option>
<option value="21m12-17">21m12-17</option>
@ -205,15 +211,32 @@
</select>
<button class="archive-button" onclick="game.archive('b1.3')">Open</button>
</div>
<button class="archive-link" 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>
<button
class="archive-link"
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 class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -221,7 +244,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -21,32 +28,32 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
<span class="nav-text">Updates</span>
<li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" />
<span>Updates</span>
</li>
<li class="nav-item selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Game</span>
<li class="selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Game</span>
</li>
<li class="nav-item" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
<span class="nav-text">Server List</span>
<li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" />
<span>Server List</span>
</li>
<li class="nav-item" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
<span class="nav-text">Mods</span>
<li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" />
<span>Mods</span>
</li>
<li class="nav-item" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
<span class="nav-text">Tutorials</span>
<li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" />
<span>Tutorials</span>
</li>
<li class="nav-item" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
<span class="nav-text">Settings</span>
<li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" />
<span>Settings</span>
</li>
</nav>
</div>
@ -98,7 +105,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -106,7 +115,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -21,32 +28,32 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
<span class="nav-text">Updates</span>
<li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" />
<span>Updates</span>
</li>
<li class="nav-item selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Game</span>
<li class="selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Game</span>
</li>
<li class="nav-item" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
<span class="nav-text">Server List</span>
<li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" />
<span>Server List</span>
</li>
<li class="nav-item" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
<span class="nav-text">Mods</span>
<li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" />
<span>Mods</span>
</li>
<li class="nav-item" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
<span class="nav-text">Tutorials</span>
<li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" />
<span>Tutorials</span>
</li>
<li class="nav-item" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
<span class="nav-text">Settings</span>
<li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" />
<span>Settings</span>
</li>
</nav>
</div>
@ -90,7 +97,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -21,32 +28,32 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
<span class="nav-text">Updates</span>
<li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" />
<span>Updates</span>
</li>
<li class="nav-item selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Game</span>
<li class="selected" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Game</span>
</li>
<li class="nav-item" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
<span class="nav-text">Server List</span>
<li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" />
<span>Server List</span>
</li>
<li class="nav-item" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
<span class="nav-text">Mods</span>
<li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" />
<span>Mods</span>
</li>
<li class="nav-item" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
<span class="nav-text">Tutorials</span>
<li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" />
<span>Tutorials</span>
</li>
<li class="nav-item" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
<span class="nav-text">Settings</span>
<li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" />
<span>Settings</span>
</li>
</nav>
</div>
@ -118,7 +125,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -126,7 +135,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
@ -9,7 +9,10 @@
<link rel="manifest" href="/manifest.json" />
<link rel="canonical" href="https://launcher.orionzleon.me/" />
<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
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"
@ -18,7 +21,10 @@
<meta property="og:type" content="website" />
<meta property="og:image" content="/resources/images/icons/minexlauncher.webp" />
<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" />
<script src="/resources/scripts/google-tag.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">
<head>
<meta charset="UTF-8" />
@ -18,12 +18,12 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item selected" onclick="navigate.mobile()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Mobile Site</span>
<li class="selected" onclick="navigate.mobile()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Mobile Site</span>
</li>
</nav>
</div>
@ -37,14 +37,22 @@
</div>
<div class="installations">
<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 class="bottom-bar">
<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 class="bottom-bar-links">
<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">
<head>
<meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -21,32 +28,32 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
<span class="nav-text">Updates</span>
<li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" />
<span>Updates</span>
</li>
<li class="nav-item" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Game</span>
<li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Game</span>
</li>
<li class="nav-item" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
<span class="nav-text">Server List</span>
<li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" />
<span>Server List</span>
</li>
<li class="nav-item selected" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
<span class="nav-text">Mods</span>
<li class="selected" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" />
<span>Mods</span>
</li>
<li class="nav-item" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
<span class="nav-text">Tutorials</span>
<li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" />
<span>Tutorials</span>
</li>
<li class="nav-item" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
<span class="nav-text">Settings</span>
<li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" />
<span>Settings</span>
</li>
</nav>
</div>
@ -67,7 +74,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -75,7 +84,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -21,32 +28,32 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
<span class="nav-text">Updates</span>
<li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" />
<span>Updates</span>
</li>
<li class="nav-item" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Game</span>
<li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Game</span>
</li>
<li class="nav-item" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
<span class="nav-text">Server List</span>
<li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" />
<span>Server List</span>
</li>
<li class="nav-item selected" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
<span class="nav-text">Mods</span>
<li class="selected" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" />
<span>Mods</span>
</li>
<li class="nav-item" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
<span class="nav-text">Tutorials</span>
<li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" />
<span>Tutorials</span>
</li>
<li class="nav-item" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
<span class="nav-text">Settings</span>
<li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" />
<span>Settings</span>
</li>
</nav>
</div>
@ -64,7 +71,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -72,7 +81,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -13,7 +13,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -31,7 +38,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -39,7 +48,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -19,12 +19,12 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item selected" href="/offline/">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Offline</span>
<li class="selected" href="/offline/">
<img src="/resources/images/icons/nav/game.webp" />
<span>Offline</span>
</li>
</nav>
</div>
@ -61,11 +61,17 @@
<img src="/resources/images/icons/clients/all.webp" />
<span>1.2.5</span>
</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" />
<span>Beta 1.7.3</span>
</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" />
<span>Beta 1.3</span>
</div>
@ -86,7 +92,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -94,7 +102,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -44,11 +44,17 @@
"updates": [
{
"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",
"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",

View File

@ -14,7 +14,19 @@ window.addEventListener('load', function () {
{ addr: 'wss://relay.shhnowisnottheti.me/', name: 'ayunami relay #1', primary: relayId === 2 },
],
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,
},
};

View File

@ -2,7 +2,10 @@
// @ts-nocheck
if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
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 {
Object.defineProperty(window, 'clientWindow', { value: window });
}
@ -135,8 +138,8 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (...A) {
if (A[0].isValid || !clientWindow.keyboardFix) return I.apply(this, A);
},
...g
)
...g,
)
: i.call(this, A, I, ...g);
},
});
@ -206,7 +209,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
(g.hidden = !0), (g.style.display = 'none');
},
{ passive: !1, once: !0 }
{ passive: !1, once: !0 },
),
clientWindow.addEventListener(
'focus',
@ -215,7 +218,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
(g.hidden = !0), (g.style.display = 'none');
}, 300);
},
{ once: !0 }
{ once: !0 },
),
document.body.appendChild(g)),
g
@ -235,7 +238,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
A.preventDefault();
},
!1
!1,
),
i.addEventListener('contextmenu', function (A) {
A.preventDefault();
@ -263,17 +266,19 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
g.preventDefault();
const e = g.targetTouches[0];
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);
},
!1
!1,
),
i.addEventListener(
'touchend',
function (g) {
(A = null), (I = null);
},
!1
!1,
),
d(null != clientWindow.fakelock);
let e = Z('strafeRightButton', 'inGame', 'div');
@ -287,7 +292,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('w', 'keydown'), e.classList.remove('hide'), c.classList.remove('hide'), n.classList.add('active');
},
!1
!1,
),
n.addEventListener(
'touchmove',
@ -296,16 +301,28 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
const I = A.targetTouches[0];
g || (g = I.pageX);
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(
'touchend',
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'),
c.classList.add('hide'),
@ -317,14 +334,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('d', 'keydown');
},
!1
!1,
),
o.addEventListener(
'touchend',
function (A) {
C('d', 'keyup');
},
!1
!1,
),
document.body.appendChild(o);
let l = Z('leftButton', 'inGame');
@ -334,14 +351,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('a', 'keydown');
},
!1
!1,
),
l.addEventListener(
'touchend',
function (A) {
C('a', 'keyup');
},
!1
!1,
),
document.body.appendChild(l);
let b = Z('backButton', 'inGame');
@ -351,14 +368,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('s', 'keydown');
},
!1
!1,
),
b.addEventListener(
'touchend',
function (A) {
C('s', 'keyup');
},
!1
!1,
),
document.body.appendChild(b);
let w = Z('jumpButton', 'inGame');
@ -368,14 +385,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C(' ', 'keydown');
},
!1
!1,
),
w.addEventListener(
'touchend',
function (A) {
C(' ', 'keyup');
},
!1
!1,
),
document.body.appendChild(w);
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');
}, 1e3));
},
!1
!1,
),
M.addEventListener(
'touchend',
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);
let v = Z('inventoryButton', 'inGame');
@ -406,14 +425,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('e', 'keydown');
},
!1
!1,
),
v.addEventListener(
'touchend',
function (A) {
C('e', 'keyup');
},
!1
!1,
),
document.body.appendChild(v);
let m = Z('exitButton', 'inMenu');
@ -423,53 +442,71 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('`', 'keydown');
},
!1
!1,
),
m.addEventListener(
'touchend',
function (A) {
C('`', 'keyup');
},
!1
!1,
),
document.body.appendChild(m);
let h = document.createElement('input', !0);
(h.id = 'hiddenInput'),
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(
'beforeinput',
function (A) {
A.stopImmediatePropagation(), A.preventDefault(!0);
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');
else {
const g = A.inputType.slice(0, 1);
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 {
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 = ' ');
},
!1
!1,
),
h.addEventListener(
'input',
function (A) {
' ' != h.value && (h.value = ' ');
},
!1
!1,
),
h.addEventListener(
'keydown',
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) {
clientWindow.hiddenInputFocused = !1;
@ -482,14 +519,15 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
A.preventDefault();
},
!1
!1,
),
a.addEventListener(
'touchend',
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);
let p = Z('placeButton', 'inGame');
@ -499,14 +537,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
t(2, 'mousedown', i);
},
!1
!1,
),
p.addEventListener(
'touchend',
function (A) {
t(2, 'mouseup', i);
},
!1
!1,
),
document.body.appendChild(p);
let R = Z('breakButton', 'inGame');
@ -516,14 +554,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
t(0, 'mousedown', i);
},
!1
!1,
),
R.addEventListener(
'touchend',
function (A) {
t(0, 'mouseup', i);
},
!1
!1,
),
document.body.appendChild(R);
let W = Z('selectButton', 'inGame');
@ -533,14 +571,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
t(1, 'mousedown', i);
},
!1
!1,
),
W.addEventListener(
'touchend',
function (A) {
t(1, 'mouseup', i);
},
!1
!1,
),
document.body.appendChild(W);
let u = Z('scrollUpButton', 'inGame');
@ -550,7 +588,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
G(i, -10);
},
!1
!1,
),
document.body.appendChild(u);
let Y = Z('scrollDownButton', 'inGame');
@ -560,7 +598,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
G(i, 10);
},
!1
!1,
),
document.body.appendChild(Y);
let S = Z('throwButton', 'inGame');
@ -570,14 +608,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('q', 'keydown');
},
!1
!1,
),
S.addEventListener(
'touchend',
function (A) {
C('q', 'keyup');
},
!1
!1,
),
document.body.appendChild(S);
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');
}, 1e3));
},
!1
!1,
),
j.addEventListener(
'touchend',
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);
let y = Z('pauseButton', 'inGame');
@ -608,14 +648,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('`', 'keydown');
},
!1
!1,
),
y.addEventListener(
'touchend',
function (A) {
C('`', 'keyup');
},
!1
!1,
),
document.body.appendChild(y);
let L = Z('chatButton', 'inGame');
@ -625,7 +665,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('t', 'keydown');
},
!1
!1,
),
document.body.appendChild(L);
let N = Z('perspectiveButton', 'inGame');
@ -635,14 +675,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('f', 'keydown'), C('5', 'keydown');
},
!1
!1,
),
N.addEventListener(
'touchend',
function (A) {
C('f', 'keyup'), C('5', 'keyup');
},
!1
!1,
),
document.body.appendChild(N);
let U = Z('screenshotButton', 'inGame');
@ -652,14 +692,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('f', 'keydown'), C('2', 'keydown');
},
!1
!1,
),
U.addEventListener(
'touchend',
function (A) {
C('f', 'keyup'), C('2', 'keyup');
},
!1
!1,
),
document.body.appendChild(U);
let z = Z('coordinatesButton', 'inGame');
@ -669,14 +709,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (A) {
C('f', 'keydown'), C('3', 'keydown');
},
!1
!1,
),
z.addEventListener(
'touchend',
function (A) {
C('f', 'keyup'), C('3', 'keyup');
},
!1
!1,
),
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
},
...rest
...rest,
);
} else {
// 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,
screenX: event.screenX,
screenY: event.screenY,
})
}),
);
}
function wheelEvent(element, delta) {
element.dispatchEvent(
new WheelEvent('wheel', {
wheelDeltaY: delta,
})
}),
);
}
function setButtonVisibility(pointerLocked) {
@ -285,7 +285,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
element.hidden = true;
element.style.display = 'none';
},
{ passive: false, once: true }
{ passive: false, once: true },
);
window.addEventListener(
'focus',
@ -295,7 +295,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
element.style.display = 'none';
}, 300);
},
{ once: true }
{ once: true },
);
document.body.appendChild(element);
}
@ -347,7 +347,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
e.preventDefault();
},
false
false,
);
touchButton.addEventListener('contextmenu', function (e) {
e.preventDefault();
@ -393,7 +393,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
}
}
},
false
false,
);
canvas.addEventListener(
@ -411,7 +411,8 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
if (primaryTouch) {
primaryTouch.distanceX = primaryTouch.clientX - canvasTouchStartX;
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.movementY = primaryTouch.clientY - canvasTouchPreviousY;
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
movementX: primaryTouch.movementX,
movementY: primaryTouch.movementY,
})
}),
);
}
}
@ -447,7 +448,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
canvasTouchPreviousY = primaryTouch.clientY;
}
},
false
false,
);
function canvasTouchEnd(e) {
@ -495,7 +496,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
strafeLeftButton.classList.remove('hide');
forwardButton.classList.add('active');
},
false
false,
);
forwardButton.addEventListener(
'touchmove',
@ -523,7 +524,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
strafeLeftButton.classList.remove('active');
}
},
false
false,
);
forwardButton.addEventListener(
'touchend',
@ -539,7 +540,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
buttonTouchStartX = null;
},
false
false,
);
strafeRightButton.classList.add('hide');
strafeLeftButton.classList.add('hide');
@ -552,14 +553,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
keyEvent('d', 'keydown');
},
false
false,
);
rightButton.addEventListener(
'touchend',
function (e) {
keyEvent('d', 'keyup');
},
false
false,
);
document.body.appendChild(rightButton);
const leftButton = createTouchButton('leftButton', 'inGame');
@ -569,14 +570,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
keyEvent('a', 'keydown');
},
false
false,
);
leftButton.addEventListener(
'touchend',
function (e) {
keyEvent('a', 'keyup');
},
false
false,
);
document.body.appendChild(leftButton);
const backButton = createTouchButton('backButton', 'inGame');
@ -586,14 +587,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
keyEvent('s', 'keydown');
},
false
false,
);
backButton.addEventListener(
'touchend',
function (e) {
keyEvent('s', 'keyup');
},
false
false,
);
document.body.appendChild(backButton);
const jumpButton = createTouchButton('jumpButton', 'inGame');
@ -603,14 +604,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
keyEvent(' ', 'keydown');
},
false
false,
);
jumpButton.addEventListener(
'touchend',
function (e) {
keyEvent(' ', 'keyup');
},
false
false,
);
document.body.appendChild(jumpButton);
@ -627,7 +628,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
crouchButton.classList.toggle('active');
}, 1000);
},
false
false,
);
crouchButton.addEventListener(
@ -640,7 +641,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
}
clearTimeout(window.crouchTimer);
},
false
false,
);
document.body.appendChild(crouchButton);
const inventoryButton = createTouchButton('inventoryButton', 'inGame');
@ -651,7 +652,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
keyEvent('e', 'keydown');
},
false
false,
);
inventoryButton.addEventListener(
'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('e', 'keyup');
},
false
false,
);
document.body.appendChild(inventoryButton);
const exitButton = createTouchButton('exitButton', 'inMenu');
@ -671,14 +672,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
keyEvent('`', 'keydown');
},
false
false,
);
exitButton.addEventListener(
'touchend',
function (e) {
keyEvent('`', 'keyup');
},
false
false,
);
document.body.appendChild(exitButton);
// ---Input Handling---
@ -703,7 +704,8 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
const hiddenInput = document.createElement('input', true);
hiddenInput.id = 'hiddenInput';
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(
'beforeinput',
function (e) {
@ -753,7 +755,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
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
},
false
false,
);
hiddenInput.addEventListener(
'input',
@ -764,14 +766,16 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
hiddenInput.value = ' ';
}
},
false
false,
);
hiddenInput.addEventListener(
'keydown',
function (e) {
// Enables Compatibility Mode if we receive an invalid key press event
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;
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
@ -780,7 +784,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
}
}
},
false
false,
);
hiddenInput.addEventListener('blur', function (e) {
// 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) {
e.preventDefault();
},
false
false,
);
keyboardButton.addEventListener(
'touchend',
@ -808,7 +812,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
window.hiddenInputFocused = true;
}
},
false
false,
);
document.body.appendChild(keyboardButton);
const placeButton = createTouchButton('placeButton', 'inGame');
@ -818,14 +822,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
mouseEvent(2, 'mousedown', canvas);
},
false
false,
);
placeButton.addEventListener(
'touchend',
function (e) {
mouseEvent(2, 'mouseup', canvas);
},
false
false,
);
document.body.appendChild(placeButton);
const breakButton = createTouchButton('breakButton', 'inGame');
@ -835,14 +839,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
mouseEvent(0, 'mousedown', canvas);
},
false
false,
);
breakButton.addEventListener(
'touchend',
function (e) {
mouseEvent(0, 'mouseup', canvas);
},
false
false,
);
document.body.appendChild(breakButton);
const selectButton = createTouchButton('selectButton', 'inGame');
@ -852,14 +856,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
mouseEvent(1, 'mousedown', canvas);
},
false
false,
);
selectButton.addEventListener(
'touchend',
function (e) {
mouseEvent(1, 'mouseup', canvas);
},
false
false,
);
document.body.appendChild(selectButton);
const scrollUpButton = createTouchButton('scrollUpButton', 'inGame');
@ -870,7 +874,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
wheelEvent(canvas, -10);
},
false
false,
);
document.body.appendChild(scrollUpButton);
const scrollDownButton = createTouchButton('scrollDownButton', 'inGame');
@ -881,7 +885,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
wheelEvent(canvas, 10);
},
false
false,
);
document.body.appendChild(scrollDownButton);
const throwButton = createTouchButton('throwButton', 'inGame');
@ -892,14 +896,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
keyEvent('q', 'keydown');
},
false
false,
);
throwButton.addEventListener(
'touchend',
function (e) {
keyEvent('q', 'keyup');
},
false
false,
);
document.body.appendChild(throwButton);
const sprintButton = createTouchButton('sprintButton', 'inGame');
@ -914,7 +918,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
sprintButton.classList.toggle('active');
}, 1000);
},
false
false,
);
sprintButton.addEventListener(
@ -927,7 +931,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
}
clearTimeout(window.sprintTimer);
},
false
false,
);
document.body.appendChild(sprintButton);
const pauseButton = createTouchButton('pauseButton', 'inGame');
@ -938,14 +942,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
keyEvent('`', 'keydown');
},
false
false,
);
pauseButton.addEventListener(
'touchend',
function (e) {
keyEvent('`', 'keyup');
},
false
false,
);
document.body.appendChild(pauseButton);
const chatButton = createTouchButton('chatButton', 'inGame');
@ -956,7 +960,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
function (e) {
keyEvent('t', 'keydown');
},
false
false,
); // For some reason dispatching a keyup event for this closes the chat, which is really weird
document.body.appendChild(chatButton);
const perspectiveButton = createTouchButton('perspectiveButton', 'inGame');
@ -968,7 +972,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keydown');
keyEvent('5', 'keydown');
},
false
false,
);
perspectiveButton.addEventListener(
'touchend',
@ -976,7 +980,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keyup');
keyEvent('5', 'keyup');
},
false
false,
);
document.body.appendChild(perspectiveButton);
const screenshotButton = createTouchButton('screenshotButton', 'inGame');
@ -988,7 +992,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keydown');
keyEvent('2', 'keydown');
},
false
false,
);
screenshotButton.addEventListener(
'touchend',
@ -996,7 +1000,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keyup');
keyEvent('2', 'keyup');
},
false
false,
);
document.body.appendChild(screenshotButton);
const coordinatesButton = createTouchButton('coordinatesButton', 'inGame');
@ -1008,7 +1012,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keydown');
keyEvent('3', 'keydown');
},
false
false,
);
coordinatesButton.addEventListener(
'touchend',
@ -1016,7 +1020,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
keyEvent('f', 'keyup');
keyEvent('3', 'keyup');
},
false
false,
);
document.body.appendChild(coordinatesButton);
}

View File

@ -7,7 +7,10 @@ let articleAnimationLock = false;
const theme = {
load: function (themeToLoad?: string) {
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) {
storage.local.set('theme', newTheme);
@ -77,7 +80,9 @@ const game = {
'1.5': '15-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) {
selectedVersion = `https://archive.eaglercraft.rip/Eaglercraft${client === '1.8' ? 'X_1.8' : `_${client}`}/client/${dropdown.value}/index.html`;
game.play();
@ -174,7 +179,7 @@ const article = {
modal.addEventListener('click', closeArticleHandler);
articleAnimationLock = false;
},
{ once: true }
{ once: true },
);
}
},
@ -189,7 +194,7 @@ const article = {
modal.style.display = 'none';
articleAnimationLock = false;
},
{ once: true }
{ once: true },
);
}
},
@ -408,7 +413,13 @@ if (window.location.pathname === '/') {
const lastPage = storage.session.get('lastPage');
const isMobile = detect.mobile();
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));
@ -429,7 +440,7 @@ if (window.location.pathname === '/') {
theme.load();
document.addEventListener('DOMContentLoaded', async () => {
const profileName = document.querySelector('.profile-name');
const profileName = document.querySelector('.profile span');
const titleBarText = document.querySelector('.title-bar span');
const lastVersion = storage.local.get('lastVersion');
@ -440,8 +451,11 @@ if (window.location.pathname === '/') {
if (profileName) profileName.textContent = storage.local.get('username');
if (titleBarText) titleBarText.textContent += ` ${currentVersion}`;
// @ts-expect-error
if (lastVersion && gt(coerce(currentVersion, { includePrerelease: true }), coerce(lastVersion, { includePrerelease: true }))) {
if (
lastVersion &&
// @ts-expect-error
gt(coerce(currentVersion, { includePrerelease: true }), coerce(lastVersion, { includePrerelease: true }))
) {
alert(`MineXLauncher has been updated to v${currentVersion}!\n\nChanges in v${currentVersion}:\n${changelog}`);
storage.local.set('lastVersion', currentVersion);
}
@ -469,7 +483,7 @@ if (window.location.pathname === '/') {
if (window.location.pathname === '/settings/') {
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 themeSelect = document.querySelector('#theme-select') as HTMLSelectElement | null;
const offlineCheckbox = document.querySelector('#offline-checkbox') as HTMLInputElement | null;
@ -506,7 +520,7 @@ if (window.location.pathname === '/settings/') {
if (offlineCheckbox.checked) {
sw.register('/sw-full.js');
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');
@ -567,12 +581,15 @@ if (window.location.pathname === '/settings/') {
// storage.local.set('offlineCache', offlineCheckbox?.checked ?? false);
// storage.local.set('showAds', true);
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) {
sw.register('/sw-full.js');
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');
@ -585,7 +602,14 @@ if (window.location.pathname === '/settings/') {
} else if (window.location.pathname === '/mods/mods/' || window.location.pathname === '/mods/resourcepacks/') {
document.addEventListener('DOMContentLoaded', async () => {
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');
// @ts-expect-error
addonData[addonType].forEach((addon) => {
@ -616,7 +640,9 @@ if (window.location.pathname === '/settings/') {
} else if (window.location.pathname === '/updates/') {
document.addEventListener('DOMContentLoaded', async () => {
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) => {
const versionHeader = document.createElement('strong');
versionHeader.textContent = `MineXLauncher ${update.version}`;

View File

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

View File

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

View File

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

View File

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

View File

@ -1,111 +1,117 @@
body {
background-color: #f5f5f5;
color: #333;
background-color: #f5f5f5;
color: #333;
}
.launcher {
background-color: #fff;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
background-color: #fff;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
}
.title-bar, .top-title, .top-nav, .bottom-bar {
background-color: #e0e0e0;
color: #333;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
.title-bar,
.top-title,
.top-nav,
.bottom-bar {
background-color: #e0e0e0;
color: #333;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.sidebar {
background-color: #f0f0f0;
border-right: 1px solid #ddd;
background-color: #f0f0f0;
border-right: 1px solid #ddd;
}
.profile {
border-bottom: 1px solid #ddd;
border-bottom: 1px solid #ddd;
}
.nav-bar .nav-item {
color: #333;
.nav-bar li {
color: #333;
}
.nav-bar .nav-item:hover, .nav-bar .nav-item.selected {
background-color: #ddd;
.nav-bar li:hover,
.nav-bar li.selected {
background-color: #ddd;
}
.main-panel, .main-content {
background-color: #fafafa;
.main-panel,
.main-content {
background-color: #fafafa;
}
.installations {
background-color: #e0e0e0;
border-top: 1px solid #ddd;
background-color: #e0e0e0;
border-top: 1px solid #ddd;
}
.custom-select {
border: 2px solid #ccc;
background-color: #fff;
color: #333;
box-shadow: 4px 4px #ddd;
border: 2px solid #ccc;
background-color: #fff;
color: #333;
box-shadow: 4px 4px #ddd;
}
.custom-select:hover {
box-shadow: 6px 6px #ddd;
box-shadow: 6px 6px #ddd;
}
.custom-options {
border: 2px solid #ccc;
background-color: #fff;
box-shadow: 4px 4px #ddd;
border: 2px solid #ccc;
background-color: #fff;
box-shadow: 4px 4px #ddd;
}
.custom-option {
border-bottom: 1px solid #ccc;
color: #333;
border-bottom: 1px solid #ccc;
color: #333;
}
.custom-option:hover {
background-color: #f0f0f0;
background-color: #f0f0f0;
}
.play-button {
background-color: #4caf50;
border: 2px solid #388e3c;
color: #fff;
background-color: #4caf50;
border: 2px solid #388e3c;
color: #fff;
}
.play-button:hover {
background-color: #66bb6a;
border-color: #2e7d32;
background-color: #66bb6a;
border-color: #2e7d32;
}
.bottom-bar .bottom-bar-left, .bottom-bar .bottom-bar-right {
color: #333;
.bottom-bar .bottom-bar-left,
.bottom-bar .bottom-bar-right {
color: #333;
}
.minecraft-button {
background-color: #e0e0e0;
border: 1px solid #ccc;
background-color: #e0e0e0;
border: 1px solid #ccc;
}
.minecraft-button:hover {
background-color: #d5d5d5;
background-color: #d5d5d5;
}
.minecraft-button:active {
background-color: #bdbdbd;
background-color: #bdbdbd;
}
.download-link {
background-color: #4caf50;
background-color: #4caf50;
}
.download-link:hover {
background-color: #66bb6a;
background-color: #66bb6a;
}
.top-nav ul li {
color: #666;
color: #666;
}
.top-nav ul li.selected {
color: #333;
color: #333;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -21,32 +28,32 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
<span class="nav-text">Updates</span>
<li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" />
<span>Updates</span>
</li>
<li class="nav-item" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Game</span>
<li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Game</span>
</li>
<li class="nav-item selected" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
<span class="nav-text">Server List</span>
<li class="selected" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" />
<span>Server List</span>
</li>
<li class="nav-item" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
<span class="nav-text">Mods</span>
<li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" />
<span>Mods</span>
</li>
<li class="nav-item" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
<span class="nav-text">Tutorials</span>
<li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" />
<span>Tutorials</span>
</li>
<li class="nav-item" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
<span class="nav-text">Settings</span>
<li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" />
<span>Settings</span>
</li>
</nav>
</div>
@ -60,7 +67,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -68,7 +77,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -21,32 +28,32 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
<span class="nav-text">Updates</span>
<li onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" />
<span>Updates</span>
</li>
<li class="nav-item" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Game</span>
<li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Game</span>
</li>
<li class="nav-item" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
<span class="nav-text">Server List</span>
<li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" />
<span>Server List</span>
</li>
<li class="nav-item" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
<span class="nav-text">Mods</span>
<li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" />
<span>Mods</span>
</li>
<li class="nav-item" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
<span class="nav-text">Tutorials</span>
<li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" />
<span>Tutorials</span>
</li>
<li class="nav-item selected" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
<span class="nav-text">Settings</span>
<li class="selected" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" />
<span>Settings</span>
</li>
</nav>
</div>
@ -80,7 +87,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -88,7 +97,14 @@
</div>
</div>
<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>
</body>
</html>

View File

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

View File

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

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -12,7 +12,14 @@
</head>
<body>
<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 class="launcher">
<div class="title-bar">
@ -21,32 +28,32 @@
<div class="content">
<div class="sidebar">
<div class="profile">
<span class="profile-name"></span>
<span></span>
</div>
<nav class="nav-bar">
<li class="nav-item selected" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
<span class="nav-text">Updates</span>
<li class="selected" onclick="navigate.updates()">
<img src="/resources/images/icons/nav/updates.webp" />
<span>Updates</span>
</li>
<li class="nav-item" onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Game</span>
<li onclick="navigate.home.game()">
<img src="/resources/images/icons/nav/game.webp" />
<span>Game</span>
</li>
<li class="nav-item" onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
<span class="nav-text">Server List</span>
<li onclick="navigate.servers()">
<img src="/resources/images/icons/nav/servers.webp" />
<span>Server List</span>
</li>
<li class="nav-item" onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
<span class="nav-text">Mods</span>
<li onclick="navigate.mods.mods()">
<img src="/resources/images/icons/nav/mods.webp" />
<span>Mods</span>
</li>
<li class="nav-item" onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
<span class="nav-text">Tutorials</span>
<li onclick="navigate.articles()">
<img src="/resources/images/icons/nav/articles.webp" />
<span>Tutorials</span>
</li>
<li class="nav-item" onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
<span class="nav-text">Settings</span>
<li onclick="navigate.settings()">
<img src="/resources/images/icons/nav/settings.webp" />
<span>Settings</span>
</li>
</nav>
</div>
@ -61,7 +68,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
@ -69,7 +78,14 @@
</div>
</div>
<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>
</body>
</html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en" style="display: none">
<head>
<meta charset="UTF-8" />
@ -39,7 +39,9 @@
</div>
<div class="bottom-bar">
<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 class="bottom-bar-links">
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>